2013-05-28 17 views
5

Ho trovato qualcosa di strano che non capisco.std :: string s() comportamento strano

std::string a(); 

Quando stampato restituisce 1. Non ho idea da dove viene. Pensavo che a() sia un costruttore senza argomenti, ma sembra che non lo sia.

Dove posso trovare informazioni a riguardo? e questo che cos'è?

E quando si cerca di fare std::string b(a); compilatore grida:

error: no matching function for call to ‘std::basic_string<char>::basic_string(std::string (&)())’ 

Spiegazione sarebbe apprezzato.

+3

Google "C++ parse più irritante". – Jon

+6

Vedi: http://en.wikipedia.org/wiki/Most_vexing_parse –

+4

Le persone, a cosa servono tutti i downvotes? La risposta è così ovvia che tutti voi sapete immediatamente qual è il problema quando vi ha morso? Votare per chiudere la questione come un duplice è grande, ma non schiaffeggiare la gente per non sapere. – Jon

risposta

5

Questa è una dichiarazione di funzione, non un'esemplificazione stringa:

std::string a(); 

Si dichiara una funzione chiamata a, senza parametri, e la restituzione di un std:string. Questi sono esemplificazioni:

std::string a; // C++03 and C++11 
std::string b{}; // C++11 syntax 
3
std::string a(); 

dichiara una funzione senza argomenti e std::string come tipo di ritorno. Quando si tenta di stamparlo, si stampa l'indirizzo, che sta valutando a true.

avvertimento: l'indirizzo del ‘std :: string un()’ sarà sempre valutare come ‘vero’ [-Waddress]

Problemi correlati