Articles of c ++ c ++ 11

Le assegnazioni di tipo ‘auto’ di un puntatore in c ++ 11 richiedono ‘*’?

Dato che la mia variabile è un puntatore, se lo assegno a una variabile di tipo “auto“, devo specificare “*”? std::vector *getVector(); //returns populated vector //… std::vector *myvector = getVector(); //assume has n items in it auto newvar1 = myvector; // vs: auto *newvar2 = myvector; //goal is to behave like this assignment: std::vector *newvar3 […]

C ++ termina chiamato senza un’eccezione triggers

Sto ottenendo un errore C ++ con il threading: terminate called without an active exception Aborted Ecco il codice: #include #include #include #include template class blocking_stream { public: blocking_stream(size_t max_buffer_size_) : max_buffer_size(max_buffer_size_) { } //PUSH data into the buffer blocking_stream &operator<<(TYPE &other) { std::unique_lock mtx_lock(mtx); while(buffer.size()>=max_buffer_size) stop_if_full.wait(mtx_lock); buffer.push(std::move(other)); mtx_lock.unlock(); stop_if_empty.notify_one(); return *this; } //POP data […]

È ansible std :: spostare oggetti fuori dalle funzioni? (C ++ 11)

Questo programma tenta di spostare una stringa fuori da una funzione e usarla per la costruzione di un’altra stringa: #include #include #include std::string && Get_String(void); int main(){ std::string str{Get_String()}; std::cout << str << std::endl; return 0; } std::string && Get_String(void){ std::string str{"hello world"}; return std::move(str); } Il programma si compila, ma segfaults dopo l’esecuzione. Questo […]

Converta std :: tuple in std :: array C ++ 11

Se ho std::tuple (dove il tipo è omogeneo), c’è una funzione stock o costruttore per convertire in std::array ? Modifica:: ero in grado di farlo funzionare con il codice del modello ricorsivo (la mia bozza di risposta pubblicata di seguito). È questo il modo migliore per gestirlo? Sembra che ci sarebbe una funzione di magazzino […]

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;