void test(int && val)
{
val=4;
}
void main()
{
test(1);
std::cin.ignore();
}
aint
は、が呼び出されたときに作成さtest
れますか、それともC ++ではデフォルトでリテラルはint
タイプですか?
コードはC++11コンパイラでのみコンパイルされることに注意してください。
デフォルトでは型である整数リテラルを渡すと、int
を記述しない限り、関数のパラメーターにバインドされた型1L
の一時オブジェクトが作成されます。これは、次の初期化の最初int
のようなものです。
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
testが呼び出されると、値1のintが作成されます。リテラルは、その形式によって入力されます。たとえば、1は整数、1.0は倍精度浮動小数点数、「1」は文字列です。