Articles of c ++ c ++ 11

È questa infinita ricorsione UB?

In C ++ 11, come un ciclo infinito senza effetti collaterali, il seguente programma è UB: int main() { while (true) {} } È anche il seguente UB? void foo() { foo(); } int main() { foo(); } Le citazioni dallo standard per entrambi i programmi sarebbero ideali.

Perché i lambda possono essere meglio ottimizzati dal compilatore rispetto alle semplici funzioni?

Nel suo libro The C++ Standard Library (Second Edition) Nicolai Josuttis afferma che lambda può essere meglio ottimizzato dal compilatore rispetto alle semplici funzioni. Inoltre, i compilatori C ++ ottimizzano lambda meglio di quanto facciano le normali funzioni. (Pagina 213) Perché? Ho pensato che quando si trattava di inlining non dovrebbe esserci più alcuna differenza. […]

Cos’è l’ereditarietà del costruttore?

In C ++ 11, cosa si intende per ereditare il costruttore? Se è ciò che penso sia (il costruttore della class base viene portato nell’ambito della class derivata), quali sono le sue implicazioni sul mio codice? Quali sono le applicazioni di tale funzione?

Dovrei usare std :: function o un puntatore a funzione in C ++?

Quando si implementa una funzione di callback in C ++, dovrei comunque usare il puntatore di funzione in stile C: void (*callbackFunc)(int); O dovrei usare la funzione std ::: std::function callbackFunc;

const vs constexpr su variabili

C’è una differenza tra le seguenti definizioni? const double PI = 3.141592653589793; constexpr double PI = 3.141592653589793; In caso contrario, quale stile è preferito in C ++ 11?

“Int size = 10;” produce un’espressione costante?

Il seguente codice compila sotto gcc 4.8 e Clang 3.2: int main() { int size = 10; int arr[size]; } 8.3.4 / 1 dello standard C ++ afferma che la dimensione di un array deve essere un’espressione costante integrale, che non sembra essere la dimensione. Si tratta di un bug in entrambi i compilatori o […]

Utilizzo di oggetti generici std :: function con funzioni membro in una class

Per una class voglio memorizzare alcuni puntatori di funzioni alle funzioni membro della stessa class in una map memorizza gli oggetti std::function . Ma non riesco proprio all’inizio con questo codice: class Foo { public: void doSomething() {} void bindFunction() { // ERROR std::function f = &Foo::doSomething; } }; Ricevo l’ error C2064: term does […]

Come emulare l’inizializzazione dell’array C “int arr = {e1, e2, e3, …}” comportamento con std :: array?

(Nota: questa domanda riguarda non dover specificare il numero di elementi e consentire comunque l’inizializzazione diretta dei tipi nidificati). Questa domanda discute gli usi lasciati per un array C come int arr[20]; . Sulla sua risposta , @James Kanze mostra una delle ultime roccaforti di array C, le sue caratteristiche di inizializzazione uniche: int arr[] […]

Ottimizzazione di un “while (1);” in C ++ 0x

Aggiornato, vedi sotto! Ho sentito e letto che C ++ 0x consente a un compilatore di stampare “Ciao” per il seguente frammento #include int main() { while(1) ; std::cout << "Hello" << std::endl; } Apparentemente ha qualcosa a che fare con i thread e le capacità di ottimizzazione. Mi sembra che questo possa sorprendere molte […]

Come posso passare un argomento unique_ptr a un costruttore o una funzione?

Sono nuovo per spostare la semantica in C ++ 11 e non conosco molto bene come gestire i parametri unique_ptr in costruttori o funzioni. Considera questa class riferendosi a se stessa: #include class Base { public: typedef unique_ptr UPtr; Base(){} Base(Base::UPtr n):next(std::move(n)){} virtual ~Base(){} void setNext(Base::UPtr n) { next = std::move(n); } protected : Base::UPtr […]