прямая и реальная ссылка - PullRequest
5 голосов
/ 28 июля 2011
void test(int && val)
{
    val=4;
}

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

Является ли int созданным при вызове test или по умолчанию в c ++ литералы имеют тип int?

Ответы [ 2 ]

7 голосов
/ 29 июля 2011

Обратите внимание, что ваш код будет компилироваться только с компилятором C ++ 11.

При передаче целочисленного литерала, который по умолчанию имеет тип int, если только вы не пишете 1L, создается временный объект типа int, связанный с параметром функция. Это как first из следующих инициализаций:

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 голосов
/ 28 июля 2011

Int со значением 1 создается при вызове test. Литералы набираются по форме. Например, 1 - это int, 1.0 - это двойное число, «1» - это строка.

...