代码如下: class Foo { public: Foo sorted() const &;//---------------成员函数1 Foo sorted() const &&;//-------------成员函数2 }; Foo Foo::sorted() const & { cout << "sorted() const & " << endl; return Foo(*this).sorted();//----------------------(1) } Foo Foo::sorted() const && { cout << "sorted() const && " << endl; return *this; } int main() { Foo f; f.sorted(); return 0; } 疑问是,为什么在(1)处调用的是“成员函数2”? 即“Foo(*this)”返回的是右值引用?各位指点一下。。 |
|
35分 |
Foo(*this)是一个临时对象
|
5分 |
const &&和const &的区别如下:
一. 右值引用,move语义,完美转发 1. 左值(lvalue)和右值(rvalue)的概念 one; // modifiable lvalue 2. 左值引用和右值引用的绑定特性 modifiable lvalue reference |
f.sorted();会先调用函数1然后在调用函数2
|
|
解释的不错, |
|
同名同参的成员函数,没问题吗
|
|
你的代码同名同参肯定是不好的,可能你的编译器编译没有问题,但是这是错误的(不知道你是不是有什么特殊技巧我没看明白)。至于你的问题,为什么会调用2,原因:(1)处返回的是一个临时值,那默认的会调用右值引用(如果存在的话)。
|
|
其实你的理解不对,你说他这是同名同参是错误的, 其实这种用法最主要的用途是为了给类的普通实例和常量实例以不同的行为,比如stl里的vector的【】运算符重载, |
|
更正下上面的示例代码:
class Foo { public: Foo sorted(const Foo * const &this) ; Foo sorted(const Foo * const &&this) ; }; |