§3.10第9節說「非等級rvalues總是具有cv-不合格類型」。這讓我不知道......非等級rvalues總是有cv-不合格類型
int foo()
{
return 5;
}
const int bar()
{
return 5;
}
void pass_int(int&& i)
{
std::cout << "rvalue\n";
}
void pass_int(const int&& i)
{
std::cout << "const rvalue\n";
}
int main()
{
pass_int(foo()); // prints "rvalue"
pass_int(bar()); // prints "const rvalue"
}
根據標準,有作爲非類類型一個const右值沒有這樣的事情,但bar()
喜歡綁定到const int&&
。這是一個編譯器錯誤?
編輯:顯然,this
也是一個const右值:)
編輯:這個問題似乎是固定在G ++ 4.5.0,這兩條線打印「右值」了。
哇,優秀的問題。我希望我能投票兩次。 – 2010-01-30 23:34:48
如果我可以爲答案提供100點獎勵。 – Omnifarious 2010-01-31 00:05:06
你正在使用哪種編譯器? g ++ 4.3.2抱怨不能用const變量重載pass_int函數。 – rajeshnair 2010-01-31 18:55:19