Pytania otagowane jako language-lawyer

W przypadku pytań dotyczących zawiłości formalnych lub autorytatywnych specyfikacji języków programowania i środowisk.

4
Czy możliwe jest odwołanie zerowe?
Czy ten fragment kodu jest prawidłowy (i zdefiniowane zachowanie)? int &nullReference = *(int*)0; Zarówno g ++ i brzęk ++ skompilować bez ostrzeżenia, nawet podczas używania -Wall, -Wextra, -std=c++98, -pedantic, -Weffc++... Oczywiście referencja nie jest tak naprawdę pusta, ponieważ nie można uzyskać do niej dostępu (oznaczałoby to wyłuskiwanie pustego wskaźnika), ale …


8
Czy „inaczej, jeśli” to jedno słowo kluczowe?
Jestem nowy w C ++. Często widzę warunkowe oświadczenie, jak poniżej: if statement_0; else if statement_1; Pytanie: Składniowo , czy należy traktować else ifjako jedno słowo kluczowe? A może jest to faktycznie zagnieżdżona ifinstrukcja w zewnętrznej, elsejak poniżej? if statement_0; else if statement_1;



8
Wydajne rzutowanie bez podpisu bez zachowania zdefiniowanego przez implementację
Chcę zdefiniować funkcję, która przyjmuje unsigned intjako argument i zwraca intkongruentny modulo UINT_MAX + 1 do argumentu. Pierwsza próba może wyglądać tak: int unsigned_to_signed(unsigned n) { return static_cast<int>(n); } Jednak, jak wie każdy prawnik zajmujący się językiem, rzutowanie wartości większych niż INT_MAX z unsigned na signed jest zdefiniowane przez implementację. …



3
Kiedy informacje o typach są cofane w C ++?
Właśnie oglądałem Stephan T. Lavavej w CppCon 2018programie „Class Template Argument Deduction”, gdzie w pewnym momencie mimochodem mówi: W C ++ informacje prawie nigdy nie płyną wstecz ... Musiałem powiedzieć „prawie”, ponieważ jest jeden lub dwa przypadki, prawdopodobnie więcej, ale bardzo niewiele . Pomimo próby ustalenia, do których przypadków może …


2
Kiedy dodatkowe nawiasy mają wpływ, inny niż pierwszeństwo operatorów?
Nawiasy w C ++ są używane w wielu miejscach: np. W wywołaniach funkcji i wyrażeniach grupujących, aby przesłonić pierwszeństwo operatorów. Oprócz niedozwolonych dodatkowych nawiasów (takich jak listy argumentów wywołań funkcji), ogólna - ale nie bezwzględna - zasada C ++ mówi, że dodatkowe nawiasy nigdy nie zaszkodzą : 5.1 Wyrażenia podstawowe …




8
Czy gałęzie z niezdefiniowanym zachowaniem można uznać za nieosiągalne i zoptymalizowane jako martwy kod?
Rozważ następujące stwierdzenie: *((char*)NULL) = 0; //undefined behavior Wyraźnie wywołuje niezdefiniowane zachowanie. Czy istnienie takiej instrukcji w danym programie oznacza, że ​​cały program jest niezdefiniowany, czy też zachowanie staje się niezdefiniowane dopiero, gdy przepływ sterowania osiągnie tę instrukcję? Czy następujący program byłby dobrze zdefiniowany, gdyby użytkownik nigdy nie wprowadził numeru …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.