【发布时间】:2011-01-11 07:31:01
【问题描述】:
§3.10 第 9 节说“非类右值始终具有 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 rvalue 这样的东西,但 bar() 更喜欢绑定到 const int&&。这是编译器错误吗?
编辑:显然,this 也是一个 const rvalue :)
编辑:这个问题似乎在 g++ 4.5.0 中得到修复,现在两行都打印“rvalue”。
【问题讨论】:
-
哇,好问题。我希望我能投票两次。
-
如果可以的话,我会为答案提供 100 分奖励。
-
您使用的是哪个编译器? g++ 4.3.2 抱怨无法使用 const 变体重载 pass_int 函数。
-
在 GCC4.6 中,这会打印两次“右值”。
标签: c++ c++11 rvalue-reference rvalue