Описание тега language-lawyer
По вопросам о тонкостях формальных или авторитетных спецификаций языков и сред программирования.
1
ответ
C++ Конструкторы по умолчанию в объединении с вариантом члена с нетривиальным конструктором по умолчанию
Я недавно прочитал описание конструкторов по умолчанию для объединений: Конструктор по умолчанию Существует следующее правило: Blockquote Удален неявно объявленный конструктор по умолчанию: [...] T является объединением, по крайней мере, с одним вар…
18 май '18 в 06:56
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 б…
08 авг '18 в 13:55
1
ответ
C++: как выполняется построение по списку инициализации?
C++ позволяет создавать экземпляры класса, устанавливая значение открытых членов через список инициализации, как показано в примере ниже для b1: class B { public: int i; std::string str; }; B b1{ 42,"foo" }; B b2(); ; Однако, если я предоставлю конс…
12 сен '16 в 03:14
2
ответа
Сравнивает ли недопустимое целое число без знака с -1 хорошо определенным?
Рассмотрим следующее †: size_t r = 0; r--; const bool result = (r == -1); Есть ли сравнение, чей результат инициализируется result иметь четко определенное поведение? И это его результат true как я ожидала? Этот Q&A; был написан, потому что я не был…
10 дек '14 в 15:58
1
ответ
Всегда ли необходимо дублировать параметр шаблона класса при включении конструкторов на его основе?
Вообще при использовании enable_if на основе типа шаблона класса необходимо продублировать тип шаблона класса в качестве параметра шаблона конструктора или метода: template < typename U = T, typename = typename std::enable_if< !std::is_void<…
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