2011-07-28 16 views
5
void test(int && val) 
{ 
    val=4; 
} 

void main() 
{ 
    test(1); 
    std::cin.ignore();  
} 

JEST int jest tworzony podczas test nazywa lub domyślnie w C++ literały są int typ?dosłowny i RValue odniesienia

+0

że powinien być 'Test (int & val)'? –

+0

Kod nie kompiluje się ... – Gob00st

+0

pod MSV10 w trybie debugowania przynajmniej kod kompiluje – Guillaume07

Odpowiedz

7

Zauważ, że Twój kod kompilowałby tylko z kompilatorem C++ 11 tylko.

Po przejechaniu integralną dosłowny, który jest domyślnie z int typu, chyba że piszesz 1L, A tymczasowy obiekt typu int jest tworzony, który jest związany z parametrem funkcji. To jak pierwszej z następujących inicjalizacji:

int &&  x = 1; //ok. valid in C++11 only. 
int &  y = 1; //error, both in C++03, and C++11 
const int & z = 1; //ok, both in C++03, and C++11 
0

Po wywołaniu testu tworzona jest wartość int z wartością 1. Literały są pisane według ich formy. Na przykład 1 to int, 1.0 to podwójne, "1" to ciąg.

+5

'" 1 "' jest 'char const [2]'. –

+1

Co to jest ciąg znaków. :-) –

+4

To bardzo mylące. Typ '" 1 "' nie jest "ciągiem" i nie ma podstawowego typu "ciąg"; gdyby tak było, to prawdopodobnie "1" i "11" miałyby ten sam typ, ale nie. –

Powiązane problemy