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

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

7
Путаница с инициализацией массива в C
На языке C, если инициализировать массив следующим образом: int a[5] = {1,2}; тогда все элементы массива, которые не инициализированы явно, будут неявно инициализированы нулями. Но, если я инициализирую массив следующим образом: int a[5]={a[2]=1}; printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]); вывод: 1 0 1 0 0 Я не …

8
«Else if» - одно ключевое слово?
Я новичок в C ++. Я часто вижу условное выражение, подобное приведенному ниже: if statement_0; else if statement_1; Вопрос: Синтаксически я должен рассматривать else ifкак одно ключевое слово? Или это действительно вложенный ifоператор внутри внешнего, elseкак показано ниже? if statement_0; else if statement_1;

7
Как может работать программа с глобальной переменной main вместо основной функции?
Рассмотрим следующую программу: #include <iostream> int main = ( std::cout << "C++ is excellent!\n", 195 ); Используя g ++ 4.8.1 (mingw64) в ОС Windows 7, программа компилируется и работает нормально, печатая: C ++ отличный! к консоли. mainвыглядит как глобальная переменная, а не функция; как эта программа может работать без функции …

2
Имеет ли этот код из раздела 36.3.6 4-го издания «Язык программирования C ++» четко определенное поведение?
В разделе « Операции, подобные STL» Бьярна Страуструпа The C ++ Programming Language 4th edition, в качестве примера цепочки используется следующий код :36.3.6 void f2() { std::string s = "but I have heard it works even if you don't believe in it" ; s.replace(0, 4, "" ).replace( s.find( "even" ), …

8
Эффективное преобразование без знака в знак, позволяющее избежать поведения, определяемого реализацией
Я хочу определить функцию, которая принимает unsigned intаргумент as и возвращает аргументу, intсовпадающему по модулю UINT_MAX + 1. Первая попытка может выглядеть так: int unsigned_to_signed(unsigned n) { return static_cast<int>(n); } Но, как известно любому юристу по языку, приведение беззнакового к подписанному для значений, превышающих INT_MAX, определяется реализацией. Я хочу реализовать …

3
Печать нулевых указателей с% p является неопределенным поведением?
Является ли неопределенное поведение печатью нулевых указателей с помощью %pспецификатора преобразования? #include <stdio.h> int main(void) { void *p = NULL; printf("%p", p); return 0; } Вопрос относится к стандарту C, а не к реализациям C.

3
Когда в C ++ информация о типах передается в обратном направлении?
Я только что наблюдал, как Стефан Т. Лававедж выступал CppCon 2018на « Выведении аргументов из шаблона класса», где в какой-то момент он, между прочим, сказал: В типе C ++ информация почти никогда не течет в обратном направлении ... Мне пришлось сказать «почти», потому что есть один или два случая, возможно, …

4
Почему (только) некоторые компиляторы используют один и тот же адрес для одинаковых строковых литералов?
https://godbolt.org/z/cyBiWY Я вижу два 'some'литерала в коде ассемблера, сгенерированном MSVC, но только один с clang и gcc. Это приводит к совершенно другим результатам выполнения кода. static const char *A = "some"; static const char *B = "some"; void f() { if (A == B) { throw "Hello, string merging!"; } …

3
Когда частный конструктор не является частным конструктором?
Допустим, у меня есть тип, и я хочу сделать его конструктор по умолчанию закрытым. Я пишу следующее: class C { C() = default; }; int main() { C c; // error: C::C() is private within this context (g++) // error: calling a private constructor of class 'C' (clang++) // error …

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

2
Ошибка при использовании внутриклассовой инициализации нестатического члена данных и конструктора вложенного класса
Следующий код довольно тривиален, и я ожидал, что он будет нормально компилироваться. struct A { struct B { int i = 0; }; B b; A(const B& _b = B()) : b(_b) {} }; Я тестировал этот код с g ++ версии 4.7.2, 4.8.1, clang ++ 3.2 и 3.3. Помимо …


3
Является ли это известной ловушкой C ++ 11 для циклов?
Представим, что у нас есть структура для хранения 3 двойников с некоторыми функциями-членами: struct Vector { double x, y, z; // ... Vector &negate() { x = -x; y = -y; z = -z; return *this; } Vector &normalize() { double s = 1./sqrt(x*x+y*y+z*z); x *= s; y *= s; …

8
Можно ли считать ветки с неопределенным поведением недоступными и оптимизировать их как мертвый код?
Рассмотрим следующее утверждение: *((char*)NULL) = 0; //undefined behavior Он явно вызывает неопределенное поведение. Означает ли существование такого оператора в данной программе, что вся программа не определена или что поведение становится неопределенным только после того, как поток управления попадает в этот оператор? Будет ли следующая программа четко определена на тот случай, …

3
Когда мне следует использовать @classmethod, а когда def (self)?
При интеграции приложения Django, которое я раньше не использовал, я обнаружил два разных способа определения функций в классах. Автор, кажется, намеренно использует их оба. Первым я сам часто пользуюсь: class Dummy(object): def some_function(self,*args,**kwargs): do something here self is the class instance Другой - тот, которым я не пользуюсь, в основном …

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