2015-05-26 16 views
23

Ho sentito dire che la parola chiave noexcept è più simile a "non dovrebbe mai generare un'eccezione" anziché "non".Esiste uno specificatore noexcept automatico?

Non penso sia opportuno utilizzare la parola chiave noexcept se non sono sicuro che generi un'eccezione o meno, ma la parola chiave noexcept è talvolta correlata alla prestazione come in un costruttore di movimento.

Così ho provato a usare i qualificatori noexcept, ma diventa più difficile se ha più istruzioni nella definizione e diventa una specie di copia e incolla.

template <class T> 
void f(T&& t) 
    noexcept(noexcept(statement_1) && 
      noexcept(statement_2) && 
      noexcept(statement_3) && 
      noexcept(statement_4) && 
      noexcept(statement_5)) 
{ 
    statement_1; 
    statement_2; 
    statement_3; 
    statement_4; 
    statement_5; 
} 

ritengo il compilatore può capire se la definizione di una funzione consiste di istruzioni non gettare, quindi sarà più facile da utilizzare noexcept se c'è un'espressione come noexcept(auto), ma sembra che non esiste cosa nello standard.

Esiste un modo per semplificare l'espressione noexcept?

+12

http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4473.html (l'idea è molto più vecchia, ad esempio http://www.open-std.org/ jtc1/sc22/wg21/docs/papers/2010/n3207.htm) – dyp

+1

@dyp Grazie !! Perché non lo metti in una risposta in modo che io possa accettarlo? – kukyakya

+0

Perché non ho idea di quale sia lo stato di tale proposta :( – dyp

risposta

6

Attualmente non ce n'è. V'è, tuttavia, una proposta su questo argomento, che propone noexcept(auto) sintassi: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4473 lo stato di questa proposta è "ha bisogno di ulteriore lavoro", secondo di Botond Ballo "Trip Report: C++ Standard Meeting di Lenexa, Maggio 2015" https://botondballo.wordpress.com/2015/06/05/trip-report-c-standards-meeting-in-lenexa-may-2015/

Ulteriori lavori. La direzione della proposta è promettente, ma non è sufficientemente sviluppata, o ci sono preoccupazioni specifiche con uno o più punti di progettazione. L'autore è incoraggiato a tornare con una proposta modificata che sia più dettagliata e/o affronti le preoccupazioni dichiarate.

...

noexcept (auto), che in pratica significa “dedurre la noexcept-ità di questa funzione dalla noexcept-ness delle funzioni chiamate. Come la detrazione di tipo restituito, ciò richiede che il corpo della funzione sia disponibile in ogni unità di traduzione che utilizza la funzione. È stato rilevato che, insieme alla proposta di fare parte delle specifiche delle eccezioni del sistema dei tipi, ciò significherebbe che la modifica del corpo della funzione potrebbe cambiare il tipo di funzione (di nuovo in modo simile alla deduzione del tipo restituito), ma le persone non erano eccessivamente preoccupate quella.

Problemi correlati