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
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
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
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.
'" 1 "' jest 'char const [2]'. –
Co to jest ciąg znaków. :-) –
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. –
że powinien być 'Test (int & val)'? –
Kod nie kompiluje się ... – Gob00st
pod MSV10 w trybie debugowania przynajmniej kod kompiluje – Guillaume07