Вопросы по теме 'language-lawyer'

Является ли стандартная библиотека С++ частью языка С++?
Является ли стандартная библиотека C++ частью языка C++? ( обратите внимание на "язык", а не на "стандарт"; конечно, оба являются частью стандарта ). Если да, то почему? Если нет, то почему? Ответ на этот вопрос может различаться в C++98,...
759 просмотров
schedule 12.10.2022

Когда нам нужен конструктор по умолчанию?
Мой вопрос прост. Когда нам нужен конструктор по умолчанию? Пожалуйста, обратитесь к коду ниже: class Shape { int k; public: Shape(int n) : k(n) {} ~Shape() {} }; class Rect : public Shape { int l; public: Rect(int n):...
36755 просмотров
schedule 20.02.2024

Какое стандартное предложение предписывает это преобразование lvalue-to-rvalue?
Данный: int main() { int x = 0; int y = x; // <--- } Может ли кто-нибудь сказать мне, какой пункт стандарта (предпочтительно 2003 г.) предписывает преобразование выражения x из lvalue в rvalue при инициализации объекта y ?...
651 просмотров
schedule 25.04.2024

Порядок использования пространства имен std; и включает?
Недавно я видел, как этот код используется в исходном файле проекта C++: using namespace std; #include <iostream> Игнорируя все вопросы о том, хорошо ли вообще иметь using namespace std , является ли приведенный выше код вообще...
7582 просмотров
schedule 16.04.2024

Неоднозначное введенное имя класса не является ошибкой
То, что я прочитал в стандарте C++ о внедренных именах классов, противоречит (на мой взгляд) поведению примера программы, который я вскоре представлю. Вот что я прочитал: #P2# #P3# #P4# #P5# Из них я понимаю, что нижеследующее...
2404 просмотров

Временное время жизни в черновике N3290 C++
Пункт из черновика N3290 C++, § 12.2, 5-й пункт, строка 10. Второй контекст — это когда ссылка привязана к временному объекту. Временный объект, к которому привязана ссылка, или временный объект, являющийся полным объектом подобъекта, к...
265 просмотров

функция try catch синтаксис и основной
Малоизвестной, но почти никогда не используемой функции C ++ дается объявление: void foo(); Одно из возможных юридических определений могло бы быть таким: void foo() try { throw 42; } catch(...) { } Здесь вся обернутая реализация...
3811 просмотров

Должен ли glob с GLOB_MARK добавлять / к результатам символической ссылки на каталог?
Функция glob имеет флаг GLOB_MARK , указанный для добавления косой черты к результатам, которые являются каталогами: GLOB_MARK К каждому имени пути, которое является каталогом, соответствующим шаблону, должно быть добавлено...
415 просмотров
schedule 02.11.2023

Где стандарт С++ описывает приведение указателей к примитивам?
В отличном сообщении в блоге Что должен знать каждый программист О неопределенном поведении в разделе «Нарушение правил типов» говорится: Приведение типа int* к типу с плавающей запятой* и разыменование его (доступ к "int", как если бы он...
441 просмотров
schedule 19.12.2023

Является ли сложность vector::clear неуказанной?
Согласно обсуждению из Is `std::vector‹primitive›::clear ()` операция с постоянным временем? было отмечено, что стандарт C++, по-видимому, не определяет время выполнения vector::clear . Он указывает время работы list::clear (линейного;...
810 просмотров
schedule 25.04.2024

Что делает enum - ›int лучшим преобразованием, чем enum -› unsigned?
В следующем коде вместо f(unsigned) выбрана перегрузка f(int) . Протестировано с помощью clang 3.0 и gcc 4.8. enum E { }; E f(int); int f(unsigned); E e = f(E(0)); Мое чтение стандарта привело меня к мысли, что enum -> int и enum...
282 просмотров

Может ли код, который никогда не будет выполнен, вызвать неопределенное поведение?
Код, который вызывает неопределенное поведение (в этом примере деление на ноль), никогда не будет выполнен, программа все еще ведет себя неопределенно? int main(void) { int i; if(0) { i = 1/0; } return 0; } Я...
4602 просмотров
schedule 13.11.2022

Как С++ освобождает память, когда конструктор выдает исключение и используется пользовательский новый
Я вижу следующие конструкции: new X освободит память, если X выкинет конструктор. operator new() может быть перегружен. Каноническое определение новой перегрузки оператора — void *operator new(size_t c, heap h) и...
2349 просмотров

Является ли (int *) 0 нулевым указателем?
Это можно рассматривать как расширение этого вопроса (меня интересует только C, но добавление C ++ для завершения расширение) Стандарт C11 в 6.3.2.3.3 говорит: Целочисленное постоянное выражение со значением 0 или такое выражение,...
10232 просмотров
schedule 28.04.2024

Допускается ли компилятору свобода действий в том, что он считает неопределенным поведением в константном выражении?
Мы знаем, что операции, которые могут вызвать неопределенное поведение, не являются основными. константные выражения ( раздел 5.19, параграф 2 из проект стандарта C++ ) В тестах, которые я провел, и clang , и gcc рассматривают неопределенное...
695 просмотров

Как интерпретировать этот параграф стандарта C++, относящийся к замене макросов
В стандарте С++ 03 есть параграф, связанный с заменой макросов препроцессора: 16.3.4 Повторное сканирование и дальнейшая замена Если имя заменяемого макроса найдено во время этого сканирования списка замены (не включая остальные токены...
231 просмотров
schedule 12.04.2024

Утечка памяти вызывает неопределенное поведение?
Это обсуждение возникло в комментариях к другому сообщению . Образец кода: #include <string> void func() { std::string* foo; foo = new std::string[125]; throw 1; delete [] foo; } int main() { try { func(); }...
1196 просмотров
schedule 06.11.2023

Взаимозависимая инициализация с запятыми?
Правильно ли определено следующее: int x = 42, y = x; то есть строго эквивалентно: int x = 42; int y = x; РЕДАКТИРОВАТЬ: вопрос не в стиле (я знаю, что это неправильно...), вопрос "теоретический"
831 просмотров

В чем разница между оператором запятой и разделителем запятой?
В C++ маркер запятой (т. е. , ) интерпретируется либо как оператор-запятая , либо как разделитель-запятая . Однако при поиске в сети я понял, что не совсем понятно, в каких случаях токен , интерпретируется как оператор двоичной запятой, а...
858 просмотров
schedule 01.12.2022

Что означает контекст ссылки?
Цитата из начала рабочего проекта раздела 3.4.3.2/3 N3797: Если задано X::m (где X — пространство имен, объявленное пользователем) или задано ::m (где X — глобальное пространство имен), если S(X, m) — пустое множество, программа некорректна. В...
163 просмотров
schedule 05.11.2023