Il seguente codice semplice segfaults sotto gcc 4.4.4 #include typedef struct Foo Foo; struct Foo { char f[25]; }; Foo foo(){ Foo f = {“Hello, World!”}; return f; } int main(){ printf(“%s\n”, foo().f); } Cambiare la linea finale a Foo f = foo(); printf(“%s\n”, ff); Funziona bene. Entrambe le versioni funzionano quando compilate con -std=c99 […]
Ispirato dalla mia precedente domanda Un errore comune per i nuovi programmatori C ++ è quello di leggere da un file con qualcosa sulla falsariga di: std::ifstream file(“foo.txt”); std::string line; while (!file.eof()) { file >> line; // Do something with line } Riferiranno spesso che l’ultima riga del file è stata letta due volte. La […]
Sono certo che questo codice dovrebbe essere illegale, in quanto chiaramente non funzionerà, ma sembra essere permesso dal FCD C ++ 0x. class X { /* … */}; void* raw = malloc(sizeof (X)); X* p = new (raw) X(); // according to the standard, the RHS is a placement-new expression ::operator delete(p); // definitely wrong, […]
TL; DR Dato il seguente codice: int* ptr; *ptr = 0; *ptr richiede una conversione da lvalue a valore di ptr prima di applicare l’indirezione? Lo standard copre l’argomento di lvalue-to-rvalue in molti punti ma non sembra specificare informazioni sufficienti per determinare se l’ operatore * richiede tale conversione. Dettagli La conversione da lvalue a […]
Sto lavorando a un’applicazione in cui è previsto un numero enorme di thread per iterare su un insieme di valori stringa e cercare di associare i propri dati con quelli disponibili nell’elenco. Sto cercando il seguente caso d’uso: Il vettore viene inizializzato con pochi elementi di tipo std :: string. (Diciamo che il nome dell’object […]
Considera questo codice, template struct Sample { typename T::X *x; //declare pointer to T’s X }; Nel codice precedente, la parola chiave typename è richiesta dal compilatore, in modo che possa distinguere tra i tipi nidificati ei valori nidificati nei modelli. Ciò significa che, in assenza della parola chiave typename , il compilatore interpreterà questo […]
Non sono molto esperto dello standard C, quindi per favore portami con me. Mi piacerebbe sapere se è garantito, dallo standard, che memcpy(0,0,0) è sicuro. L’unica restrizione che ho trovato è che se le regioni di memoria si sovrappongono, allora il comportamento non è definito … Ma possiamo considerare che le regioni di memoria si […]
Diciamo che ho un tipo e voglio rendere privato il costruttore predefinito. Scrivo quanto segue: 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’ cannot access private member declared […]
Considera il seguente programma: public class GenericTypeInference { public static void main(String[] args) { print(new SillyGenericWrapper().get()); } private static void print(Object object) { System.out.println(“Object”); } private static void print(String string) { System.out.println(“String”); } public static class SillyGenericWrapper { public T get() { return null; } } } Stampa “String” sotto Java 8 e “Object” sotto […]
Sto leggendo un libro e ho scoperto che reinterpret_cast non dovrebbe essere usato direttamente, ma piuttosto gettare a vuoto * in combinazione con static_cast : T1 * p1=… void *pv=p1; T2 * p2= static_cast(pv); Invece di: T1 * p1=… T2 * p2= reinterpret_cast(p1); Tuttavia, non riesco a trovare una spiegazione perché è meglio del cast […]