Jul*_*n__ 1 c++ rvalue-reference c++11
我遇到了以下代码,我在谷歌上找不到为什么以下语句是有效的C++:
Base&& b = Derived();
Run Code Online (Sandbox Code Playgroud)
请解释或参考
这是一个示例代码:
#include <iostream>
using namespace std;
class Base{
public:
virtual ~Base(){}
virtual void say_hi() { cout << "hi base"; }
};
class Derived : public Base{
public:
virtual ~Derived(){}
virtual void say_hi() { cout << "hi derived"; }
};
int main(int argc, const char * argv[]) {
Base&& b = Derived();
b.say_hi();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
印刷品:
hi derived
Run Code Online (Sandbox Code Playgroud)
这是临时绑定到r值引用.临时值可以绑定到常量l值引用和r值引用.
至于为什么它正确调用派生函数,那是因为你正在调用一个虚函数.动态调度正常进行.
这与使用带有r值引用参数的函数调用相同:
void callHi(Base&& b){
b.say_hi();
}
...
callHi(Derived{}); // ultimately calls derived say_hi method
Run Code Online (Sandbox Code Playgroud)
你提到切片.为了进行切片,事件序列比简单地调用虚函数要复杂一些.
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |