Вопросы с тегом «language-lawyer»

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

1894
C ++ 11 представил стандартизированную модель памяти. Что это значит? И как это повлияет на программирование на C ++?

C ++ 11 представил стандартизированную модель памяти, но что именно это означает? И как это повлияет на программирование на C ++? В этой статье ( Гэвин Кларк, которая цитирует Херба Саттера ) говорится, что Модель памяти означает, что код C ++ теперь имеет стандартизированную библиотеку для вызова...

678
В CSS Flexbox, почему нет свойств «justify-items» и «justify-self»?

Рассмотрим основную ось и поперечную ось гибкого контейнера:                                                                                                                                                    Источник: W3C Для выравнивания гибких элементов вдоль главной оси есть одно свойство:...

335
int a [] = {1,2,}; Странная запятая разрешена. Любая конкретная причина?

Возможно, я не с этой планеты, но мне кажется, что синтаксическая ошибка должна быть следующей: int a[] = {1,2,}; //extra comma in the end Но это не так. Я был удивлен , когда этот код скомпилирован на Visual Studio, но я научился не доверять MSVC компилятор, насколько правила C ++ обеспокоены, так...

288
Является ли main действительным идентификатором Java?

Один из моих детей учится на Java в старшей школе, и у него было одно из его испытаний: Что из следующего является допустимым идентификатором в Java? а. 123java б. main с. java1234 д. {abce е. )whoot Он ответил б и ошибся. Я посмотрел на этот вопрос и утверждал , что main является допустимым...

267
Почему f (i = -1, i = -1) неопределенное поведение?

Я читал о порядке нарушений оценки , и они приводят пример, который озадачивает меня. 1) Если побочный эффект на скалярный объект не секвенирован относительно другого побочного эффекта на тот же скалярный объект, поведение не определено. // snip f(i = -1, i = -1); // undefined behavior В этом...

186
Что заставило меня = i ++ + 1; законно в C ++ 17?

Прежде чем вы начнете кричать неопределенное поведение, это явно указано в N4659 (C ++ 17) i = i++ + 1; // the value of i is incremented Еще в N3337 (C ++ 11) i = i++ + 1; // the behavior is undefined Что изменилось? Из того, что я могу собрать, из [N4659 basic.exec] За исключением отмеченных...

170
С ++ 11, 14, 17 или 20 вводит стандартную константу для пи?

Существует довольно глупая проблема с числом пи в C и C ++. Насколько я знаю, M_PIопределено в math.hне требуется ни одного стандарта. Новые стандарты C ++ ввел много сложных математических в стандартной библиотеке - гиперболических функций, std::hermiteи std::cyl_bessel_i, различных генераторов...

153
Оптимизация «время (1);» в C ++ 0x

Обновлено, смотрите ниже! Я слышал и читал, что C ++ 0x позволяет компилятору напечатать «Hello» для следующего фрагмента #include <iostream> int main() { while(1) ; std::cout << "Hello" << std::endl; } По-видимому, это как-то связано с потоками и возможностями оптимизации. Мне...

153
Правильно ли определена операция «ложь <истина»?

Определяет ли спецификация C ++: существование оператора «меньше чем» для логических параметров, и если да, результат перестановок с 4 параметрами? Другими словами, определяются ли результаты следующих операций спецификацией? false < false false < true true < false true < true На моей...

135
Инициализация нуля в C ++ - почему `b` в этой программе не инициализирован, а` a` инициализирован?

Согласно принятому (и единственному) ответу на этот вопрос переполнения стека , Определение конструктора с помощью MyTest() = default; вместо этого будет нулевая инициализация объекта. Тогда почему следующее, #include <iostream> struct foo { foo() = default; int a; }; struct bar { bar(); int...

135
Копирование / перемещение назначения в std :: vector :: erase () и std :: deque :: erase ()

В процессе ответа на другой вопрос я наткнулся на несколько иные формулировки для std::vector::erase()и std::deque::erase(). Вот что говорит C ++ 14 std::deque::erase( [deque.modifiers]/4-6выделение мое): Эффекты: ... Сложность: Количество вызовов к деструктору такое же, как и количество стертых...

134
Как этот кусок кода определяет размер массива без использования sizeof ()?

Проходя через несколько вопросов на собеседовании с C, я нашел вопрос о том, как найти размер массива в C без использования оператора sizeof, со следующим решением. Это работает, но я не могу понять, почему. #include <stdio.h> int main() { int a[] = {100, 200, 300, 400, 500}; int size = 0;...

131
Как сделать бесконечный пустой цикл, который не будет оптимизирован?

Стандарт C11, по-видимому, подразумевает, что итерационные операторы с постоянными управляющими выражениями не должны быть оптимизированы. Я беру свой совет из этого ответа , который конкретно цитирует раздел 6.8.5 из проекта стандарта: Оператор итерации, управляющее выражение которого не является...

129
Доступ к неактивному члену союза и неопределенному поведению?

У меня создалось впечатление, что доступ к unionчлену, отличному от последнего набора, - это UB, но я не могу найти надежную ссылку (кроме ответов, в которых утверждается, что это UB, но без какой-либо поддержки со стороны стандарта). Итак, это неопределенное...

126
Безопасно ли возвращать элемент из того же вектора?

vector<int> v; v.push_back(1); v.push_back(v[0]); Если второй push_back вызывает перераспределение, ссылка на первое целое число в векторе больше не будет действительной. Так это небезопасно? vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]); Это делает его...

126
Определение оператора «==» для Double

По какой-то причине я пробирался к исходному тексту .NET Framework для этого класса Doubleи обнаружил, что объявление ==: public static bool operator ==(Double left, Double right) { return left == right; } Та же самая логика применима к каждому оператору. Какой смысл в таком определении? Как это...