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

19
Является ли значение указателя `this` постоянным в течение всего времени существования объекта?

thisГарантируется ли значение указателя постоянным в течение жизни определенного объекта? Я не могу представить себе случай, когда это изменится, но не знаю, не пропустил ли я...

18
Стрелка (->) приоритет оператора / приоритет самый низкий, или приоритет назначения / комбинированное назначение самый низкий?

JLS : Оператор с наименьшим приоритетом - стрелка лямбда-выражения (->) , за которой следуют операторы присваивания. В каком направлении следовали (увеличение приоритета, уменьшение приоритета)? - «сопровождается» означает, что присвоение имеет более высокий или более низкий приоритет (по...

17
Правильно ли Clang отклонять код, в котором вложенный класс шаблона класса определяется только через специализации?

Дан следующий шаблон класса: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; мы определяем Innerотдельно для каждой специализации Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; а затем определить...

17
Почему стандарт C ++ обрабатывает файл в поисках так, как он это делает?

C ++ использует streamoffтип для представления смещения внутри (файлового) потока и определяется следующим образом в [stream.types]: using streamoff = implementation-defined ; Тип streamoff является синонимом одного из подписанных базовых целочисленных типов достаточного размера, чтобы представить...

17
Прыжки через переменную инициализации плохо сформированы или это вызывает неопределенное поведение?

Рассмотрим этот код: void foo() { goto bar; int x = 0; bar: ; } GCC и Clang отклоняют это , потому что переход к bar:обходу инициализации переменной. MSVC вообще не жалуется (кроме случаев, xкогда bar:вызывает предупреждение). Мы можем сделать аналогичную вещь с switch: void foo() { switch (0) {...

15
Является ли программа, которая никогда не завершает действительную программу C ++?

Требуется ли прекращение работы программы? Другими словами, это программа, которая всегда работает технически с неопределенным поведением? Обратите внимание, что это не о пустых циклах. Разговор о программах, которые делают "вещи" (то есть наблюдаемое поведение) навсегда. Например, что-то вроде...

15
Почему у `std :: basic_ios` есть открытый конструктор?

std::basic_iosимеет открытый конструктор : explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb); IMO, единственная причина, по которой у класса есть открытый конструктор, - это использование автономного экземпляра этого класса в программе. Если класс существует только для того, чтобы...

15
Как компиляторы c ++ находят переменную extern?

Я компилирую эту программу с помощью g ++ и clang ++. Есть разница: g ++ печатает 1, а clang ++ печатает 2. Кажется, что g ++: внешняя переменная определена в самой короткой области видимости. clang ++: внешняя переменная определена в самой короткой глобальной области видимости. Есть ли в C ++...

15
Должен ли анализатор Haskell разрешать цифры Unicode в числовых литералах?

В качестве упражнения я пишу парсер для Haskell с нуля. Создавая лексер, я заметил следующие правила в отчете Haskell 2010 : цифра → ascDigit | uniDigit ascDigit → 0| 1| … | 9 uniDigit → любая десятичная цифра Unicode октит → 0| 1| … | 7 hexit → цифра | A| … | F| a| … |f десятичное → значный {...

14
Почему мы не можем создавать тривиально конструируемые объекты, используя malloc, если тривиальный конструктор по умолчанию не выполняет никаких действий?

Мне трудно понять следующий абзац, цитируемый из cppreference о тривиальном конструкторе по умолчанию. Я искал stackoverflow, но все еще не получил четкого ответа. Поэтому, пожалуйста, помогите. Тривиальный конструктор по умолчанию - это конструктор, который не выполняет никаких действий. Все типы...

14
Это ошибка в std :: gcd?

Я сталкивался с таким поведением, std::gcdкоторое я нашел неожиданным: #include <iostream> #include <numeric> int main() { int a = -120; unsigned b = 10; //both a and b are representable in type C using C = std::common_type<decltype(a), decltype(b)>::type; C ca = std::abs(a); C cb...

14
Является ли разница между двумя экземплярами constexpr указателей __func__ все еще constexpr?

Это действительный C ++? int main() { constexpr auto sz = __func__ - __func__; return sz; } GCC и MSVC считают, что все в порядке, Clang считает, что это не так: Compiler Explorer . Все компиляторы соглашаются, что с этим все в порядке: Compiler Explorer . int main() { constexpr auto p = __func__;...

14
Почему оптимизация пустой базы запрещена, если пустой базовый класс также является переменной-членом?

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

13
если constexpr с static_assert в лямбде, какой компилятор правильный?

Когда мы хотим использовать a static_assertв a, if constexprмы должны сделать условие зависимым от некоторого параметра шаблона. Интересно, что gcc и clang не согласны, когда код обернут в лямбду. Следующий код компилируется с помощью gcc, но clang запускает утверждение, даже если значение if...

13
Является ли объяснение расслабленного порядка ошибочным в сравнении?

В документации std::memory_orderна cppreference.com есть пример непринужденного заказа: Расслабленный заказ Маркированные атомарные операции memory_order_relaxedне являются операциями синхронизации; они не навязывают порядок между одновременными обращениями к памяти. Они гарантируют только...

13
Как достичь барьера StoreLoad в C ++ 11?

Я хочу написать переносимый код (Intel, ARM, PowerPC ...), который решает вариант классической задачи: Initially: X=Y=0 Thread A: X=1 if(!Y){ do something } Thread B: Y=1 if(!X){ do something } в которой цель состоит в том, чтобы избежать ситуации, в которой работают оба потокаsomething . (Хорошо,...

12
Какие правила существуют для функции a -> (), вычисляемой в Haskell?

Как и в заголовке: какие гарантии существуют для функции, возвращающей единицу функции Haskell, которая будет оценена? Можно было бы подумать, что в таком случае нет необходимости выполнять какую-либо оценку, компилятор может заменить все такие вызовы непосредственным ()значением, если нет явных...