【发布时间】:2016-06-22 19:59:57
【问题描述】:
我有以下设置:
struct foo
{
void bar( ) & { std::cout << "lvalue\n"; }
void bar( ) && { std::cout << "rvalue\n"; }
~foo( ) { bar( ); }
};
int main( int arg, char **argv )
{
foo{ }.bar();
}
导致输出
rvalue
lvalue
我不明白 dtor 的输出总是lvalue
不管我怎么努力。虽然我同意取地址
类似于
(*this).bar( ); // sure enough this will print lvalue
调用 lvalue-overload 我不明白为什么我永远无法得到 rvaluefor dtor 的输出。
我觉得这很奇怪,因为对象首先是一个右值,并且在被破坏之前以某种方式绑定到一个左值。这是怎么回事?
【问题讨论】:
-
你错过了跟踪构造函数。
-
...
foo( ) { bar( ); }
标签: c++ lvalue rvalue overload-resolution