Описание тега language-lawyer

По вопросам о тонкостях формальных или авторитетных спецификаций языков и сред программирования.
1 ответ

C++ Конструкторы по умолчанию в объединении с вариантом члена с нетривиальным конструктором по умолчанию

Я недавно прочитал описание конструкторов по умолчанию для объединений: Конструктор по умолчанию Существует следующее правило: Blockquote Удален неявно объявленный конструктор по умолчанию: [...] T является объединением, по крайней мере, с одним вар…
2 ответа

Почему мой второй фрагмент ниже показывает неопределенное поведение?

И то и другое clang а также g++ похоже, что он соответствует последней версии параграфа [expr.const]/5 в стандарте C++. Следующий фрагмент выводит 11 для обоих компиляторов. Смотрите живой пример: #include <iostream> void f(void) { static int …
01 янв '16 в 13:09
3 ответа

Как заставить VS2015 правильно отклонить использование префикса класса в объявлении класса?

Я недавно скопировал и вставил функцию-член C++ из моего cpp-файла в заголовок и забыл удалить префикс. Итак, в файле cpp у меня было что-то вроде: int MyClass::Return42() const { return 42; } и в моем заголовке: class MyClass { public: int MyClass:…
07 авг '18 в 08:04
2 ответа

cin перезаписывает мое инициализированное значение, когда оно читает неправильный тип?

Так что это действительно базовый вопрос и супер тривиальный, но я просто изучаю принципы и практики программирования на C++, и моя программа для чтения в виде строки и int ведет себя не так, как книга, написанная Бьярном Страуструпом, так что я уди…
05 май '17 в 01:44
8 ответов

Допустимый, но бесполезный синтаксис в switch-case?

Через небольшую опечатку я случайно нашел эту конструкцию: int main(void) { char foo = 'c'; switch(foo) { printf("Cant Touch This\n"); // This line is Unreachable case 'a': printf("A\n"); break; case 'b': printf("B\n"); break; case 'c': printf("C\n"…
18 янв '17 в 19:02
2 ответа

Каким образом этот код псевдонимов для структурных полей вызывает неопределенное поведение

Учитывая код: #include <stdlib.h> #include <stdint.h> typedef struct { int32_t x, y; } INTPAIR; typedef struct { int32_t w; INTPAIR xy; } INTANDPAIR; void foo(INTPAIR * s1, INTPAIR * s2) { s2->y++; s1->x^=1; s2->y--; s1->x^=1…
26 ноя '15 в 23:14
2 ответа

Что именно означает недействительность ссылки / указателя?

Я не могу найти какое-либо определение для недействительности указателей / ссылок в Стандарте. Я спрашиваю, потому что я только что узнал, что C++11 запрещает копирование при записи (COW) для строк. Насколько я понимаю, если COW был применен, то p б…
1 ответ

C++: как выполняется построение по списку инициализации?

C++ позволяет создавать экземпляры класса, устанавливая значение открытых членов через список инициализации, как показано в примере ниже для b1: class B { public: int i; std::string str; }; B b1{ 42,"foo" }; B b2(); ; Однако, если я предоставлю конс…
2 ответа

Сравнивает ли недопустимое целое число без знака с -1 хорошо определенным?

Рассмотрим следующее †: size_t r = 0; r--; const bool result = (r == -1); Есть ли сравнение, чей результат инициализируется result иметь четко определенное поведение? И это его результат true как я ожидала? Этот Q&A; был написан, потому что я не был…
1 ответ

Всегда ли необходимо дублировать параметр шаблона класса при включении конструкторов на его основе?

Вообще при использовании enable_if на основе типа шаблона класса необходимо продублировать тип шаблона класса в качестве параметра шаблона конструктора или метода: template < typename U = T, typename = typename std::enable_if< !std::is_void&lt…
23 авг '16 в 11:50
3 ответа

Могу ли я присвоить значение одному члену объединения и прочитать то же значение из другого?

В основном у меня есть struct foo { /* variable denoting active member of union */ enum whichmember w; union { struct some_struct my_struct; struct some_struct2 my_struct2; struct some_struct3 my_struct3; /* let's say that my_struct is the largest m…
10 дек '15 в 01:30
1 ответ

Почему это настраиваемое свойство нельзя удалить?

Настраиваемые свойства кажутся удаляемыми: var o = {}; Object.defineProperty(o, 'prop', { configurable: true, value: 'val' }); delete o.prop; // true o.prop; // undefined Но это не работает в следующем случае, по крайней мере, в Firefox и Chrome: va…
14 мар '15 в 00:48
5 ответов

Определение оператора "==" для Double

По какой-то причине я пробирался в источник.NET Framework для класса Double и обнаружил, что декларация == является: public static bool operator ==(Double left, Double right) { return left == right; } Та же логика применяется для каждого оператора. …
01 фев '16 в 15:04
1 ответ

Какова была цель смелого текста ниже в [class.copy]/12 на C++14?

[class.copy]/12 в C++14: Конструктор копирования / перемещения для класса X тривиален, если он не предоставлен пользователем, его список параметров-типов эквивалентен списку параметров-типов неявного объявления, и если (12.1) - класс X не имеет вирт…
19 окт '16 в 12:14
1 ответ

Неправильный ответ для Upwork C++ Test

Следующий вопрос является частью теста C++ на Upwork. class A { typedef int I; // private member I f(); friend I g(I); static I x; }; какие из следующих действительны: 1) A::I A::f() { return 0; } 2) A::I g(A::I p = A::x); 3) A::I g(A::I p) { return…
21 дек '16 в 09:15
3 ответа

Где стандарт C++98 указывает, когда вызов статического члена зависит от шаблона?

Компилируя с Clang 3.0 -std= C++98, следующий код принят: template<int> struct I { typedef int Type; }; template<class> struct S { static int f(int); //static int f(int*); // implicitly instantiates I<sizeof(int)> typedef I<size…
02 июн '13 в 21:43
4 ответа

Поймать исключение по ссылке на констант

Это действительно как обработчик исключений, где T некоторый класс с неconst функция-член func? Другими словами: это catch гарантированно привязывается напрямую к (модифицируемому) объекту исключения, или компилятор может использовать некоторую хитр…
20 июл '15 в 21:42
2 ответа

Имеет ли смысл псевдодеструктор-name для не-класса и не-enum типа?

Есть цитата из 5.2.4/1 N3797, окончательный рабочий проект C++14: Использование псевдодеструктора-имени после точки. или стрелка -> оператор представляет деструктор для не-классового типа, обозначенного type-name или decltype-спецификатором. Вопрос …
02 июн '14 в 17:38
2 ответа

Скопировать произвольный тип в C без динамического выделения памяти

Вопрос: Я думаю, что нашел способ, который, насколько я могу судить, позволяет вам писать полностью независимый от типа код, который делает копию переменной произвольного типа в "стеке" (в кавычках, потому что стандарт C на самом деле не требует дол…
12 сен '15 в 10:09
1 ответ

Объявление переменной с именем `this` внутри лямбды в скобках приводит к разным результатам на 3 разных компиляторах

В C++ можно объявить переменную в скобках, например int (x) = 0;, Но похоже, что если вы используете this вместо имени переменной используется конструктор: A (this); звонки A::A(B*), Итак, первый вопрос, почему это отличается для thisпотому что пере…
01 мар '17 в 10:15