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 …
W języku C, jeśli zainicjuj tablicę w ten sposób: int a[5] = {1,2}; wtedy wszystkie elementy tablicy, które nie zostały zainicjowane jawnie, zostaną zainicjowane niejawnie zerami. Ale jeśli zainicjalizuję tablicę w ten sposób: int a[5]={a[2]=1}; printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]); wynik: 1 0 1 0 0 …
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;
Rozważ następujący program: #include <iostream> int main = ( std::cout << "C++ is excellent!\n", 195 ); Używając g ++ 4.8.1 (mingw64) w systemie operacyjnym Windows 7, program kompiluje się i działa dobrze, drukując: C ++ jest doskonały! do konsoli. mainwydaje się być raczej zmienną globalną niż funkcją; jak ten program …
W sekcji C ++ Programming Language Bjarne Stroustrupa, 4. wydanie, sekcja 36.3.6 Operacje podobne do STL, następujący kod jest używany jako przykład łączenia : 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" …
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ę. …
Czy drukowanie wskaźników o wartości null ze specyfikatorem %pkonwersji jest niezdefiniowane ? #include <stdio.h> int main(void) { void *p = NULL; printf("%p", p); return 0; } Pytanie dotyczy standardu C, a nie implementacji C.
Powiedzmy, że mam typ i chcę ustawić jego domyślny konstruktor jako prywatny. Piszę co następuje: 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 C2248: 'C::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 …
https://godbolt.org/z/cyBiWY Widzę dwa 'some'literały w kodzie asemblera wygenerowanym przez MSVC, ale tylko jeden z clang i gcc. Prowadzi to do zupełnie innych wyników wykonania kodu. static const char *A = "some"; static const char *B = "some"; void f() { if (A == B) { throw "Hello, string merging!"; } …
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 …
Poniższy kod jest dość trywialny i spodziewałem się, że powinien się dobrze skompilować. struct A { struct B { int i = 0; }; B b; A(const B& _b = B()) : b(_b) {} }; Przetestowałem ten kod z g ++ w wersji 4.7.2, 4.8.1, clang ++ 3.2 i 3.3. …
class C { using namespace std; // error }; namespace N { using namespace std; // ok } int main () { using namespace std; // ok } Edycja : chcesz poznać motywację za tym.
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 …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.