2016-01-05 12 views
5

Recentemente ho letto che il letterale è sufficiente come s, h, ms ecc in C++ 14 sono stati inseriti nello spazio nomi std::literals. Quindi se devo usarli allora dovrei includere lo spazio dei nomi o usare std::literals:: per denotare quei suffissi. Tuttavia quando ho provato il seguente programma (cpp.sh/9ytu) senza utilizzare una di queste ho avuto l'uscita richiesta: -Utilizzo di suffissi senza std :: letterali

#include <iostream> 
#include <thread> 
using namespace std; 
int main() 
{ 
    auto str = "He is there"s; 
    auto timegap = 1s; 
    cout << "The string is :-" << endl; 
    this_thread::sleep_for(timegap); 
    cout << str; 
    return 0; 
} 
/*Output:- 
The string is :- 
He is there 
*/ 

Come potete vedere non ho incluso alcun namespace o std::literals:: ancora il mio programma viene eseguito correttamente. Ho provato questo in Orwell DevC++, C++ Shell, Coliru & ha ottenuto la stessa uscita ovunque. Qual è il problema ?

+1

si ha '' using namespace std; ', e i letterali si trovano in uno spazio dei nomi in linea all'interno di' std', vero? –

+1

Contrassegna sempre anche "C++", altrimenti ad es. l'evidenziazione della sintassi è disabilitata. – Columbo

+0

ok @Columbo lo farò –

risposta

5

literals e chrono_literals sono spazi dei nomi in linea - vedi [time.syn] in questo caso particolare:

inline namespace literals { 
inline namespace chrono_literals { 
    // 20.12.5.8, suffixes for duration literals 
    constexpr chrono::hours h(unsigned long long); 
    […] 

Pertanto, a causa using namespace std;, tutti UDL si trovano.

+0

quindi l'uso di metterli in altri spazi dei nomi invece di 'std' da solo –

+2

@AnkitAcharya Quindi puoi scrivere' utilizzando namespace std :: literals; 'se non vuoi sfruttare l'intero spazio dei nomi 'std'. – Columbo

+0

@AnkitAcharya: http://stackoverflow.com/q/11016220/179910 –

Problemi correlati