Articles of c ++ c ++ 11

Significato di = cancella dopo la dichiarazione della funzione

class my_class { … my_class(my_class const &) = delete; … }; Cosa significa = delete significa in quel contesto? Ci sono altri “modificatori” (diversi da = 0 e = delete )?

std :: associa una funzione associata

Sto avendo problemi a scoprire perché diavolo non si sta compilando. Ho una funzione lambda che restituisce una std::function basata su alcuni argomenti. Ho ristretto il mio problema a questo snippet (che non usa lambdas, ma riproduce perfettamente il mio errore): #include #include struct foo { template void bar(T data) { std::cout << data << […]

È 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[] […]