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

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

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

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

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

9
Безопасно ли возвращать элемент из того же вектора?
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]); Это делает его безопасным?

2
Лямбда-захват и параметр с тем же именем - кто затеняет другого? (clang против gcc)
auto foo = "You're using g++!"; auto compiler_detector = [foo](auto foo) { std::puts(foo); }; compiler_detector("You're using clang++!"); clang ++ 3.6.0 и новее распечатайте "Вы используете clang ++!" и предупредить о неиспользовании захвата foo . g ++ 4.9.0 и новее распечатайте «Вы используете g ++!» и предупредить о неиспользовании параметра foo …

6
Лямбда возвращается сама: это законно?
Рассмотрим эту довольно бесполезную программу: #include <iostream> int main(int argc, char* argv[]) { int a = 5; auto it = [&](auto self) { return [&](auto b) { std::cout << (a + b) << std::endl; return self(self); }; }; it(it)(4)(6)(42)(77)(999); } По сути, мы пытаемся сделать лямбду, которая возвращает сама себя. …

2
Когда вызов функции-члена в экземпляре NULL приводит к неопределенному поведению?
Рассмотрим следующий код: #include <iostream> struct foo { // (a): void bar() { std::cout << "gman was here" << std::endl; } // (b): void baz() { x = 5; } int x; }; int main() { foo* f = 0; f->bar(); // (a) f->baz(); // (b) } Мы ожидаем (b)сбоя, …

5
Почему тернарный оператор с запятыми оценивает только одно выражение в истинном случае?
В настоящее время я изучаю C ++ с помощью книги C ++ Primer, и одно из упражнений в книге: Объясните, что делает следующее выражение: someValue ? ++x, ++y : --x, --y Что мы знаем? Мы знаем, что тернарный оператор имеет более высокий приоритет, чем оператор запятой. С бинарными операторами это …

2
Программа компилируется по-разному в трех основных компиляторах C ++. Какой из них правильный?
В качестве интересного продолжения (хотя и не имеющего большого практического значения) моего предыдущего вопроса: почему C ++ позволяет нам заключать имя переменной в круглые скобки при объявлении переменной? Я обнаружил, что объединение объявления в круглых скобках с введенной функцией имени класса может привести к неожиданным результатам в отношении поведения компилятора. …

8
При использовании заголовков C в C ++ должны ли мы использовать функции из std :: или глобального пространства имен?
C в некоторой степени, не совсем так, является подмножеством C ++. Таким образом, мы можем использовать большинство функций / заголовков C в C ++, немного изменив имя ( stdio.hна cstdio, stdlib.hна cstdlib). На самом деле мой вопрос носит семантический характер. В коде C ++ ( с использованием новейшей версии GCC …
113 c++  language-lawyer  std 

8
Что такое «ад обратных вызовов» и как и почему RX решает эту проблему?
Может ли кто-нибудь дать четкое определение вместе с простым примером, объясняющим, что такое «ад обратных вызовов» для тех, кто не знает JavaScript и node.js? Когда (в каких настройках) возникает "проблема с обратным вызовом"? Почему это происходит? Всегда ли «ад обратных вызовов» связан с асинхронными вычислениями? Или «ад обратных вызовов» может …

2
Обязан ли C ++ 20 хранить исходный код в файлах?
Однако немного странный вопрос, если я правильно помню, исходный код C ++ не требует файловой системы для хранения файлов. Наличие компилятора, который сканирует рукописные документы через камеру, было бы соответствующей реализацией. Хотя практически не имеет особого смысла. Однако C ++ 20 теперь добавляет расположение источника с расширением file_name. Означает ли …

4
Возможна ли нулевая ссылка?
Действителен ли этот фрагмент кода (и определено ли поведение)? int &nullReference = *(int*)0; Оба г ++ и лязг ++ компиляция без какого - либо предупреждения, даже при использовании -Wall, -Wextra, -std=c++98, -pedantic, -Weffc++... Конечно, ссылка на самом деле не является нулевой, поскольку к ней нельзя получить доступ (это означало бы …

2
Эффективно final vs final - другое поведение
До сих пор я думал, что фактически final и final более или менее эквивалентны и что JLS будет рассматривать их одинаково, если не идентично в реальном поведении. Затем я нашел этот надуманный сценарий: final int a = 97; System.out.println(true ? a : 'c'); // outputs a // versus int a …

9
Были ли когда-нибудь изменения в тихом поведении C ++ с новыми стандартными версиями?
(Я ищу пару примеров, чтобы доказать свою точку зрения, а не список.) Было ли когда-нибудь изменение стандарта C ++ (например, с 98 на 11, с 11 на 14 и т. Д.) Изменяло поведение существующего, правильно сформированного пользовательского кода с определенным поведением - незаметно? т.е. без предупреждения или ошибок при компиляции …

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.