C++ : 切片至基值
C++ : Slicing to base rvalue?
我遇到了以下代码,但我在谷歌上找不到为什么以下语句C++有效:
Base&& b = Derived();
请解释或提供参考
下面是一个示例代码:
#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;
}
指纹:
hi derived
这是将临时绑定到 r 值引用。临时变量可以绑定到常量 l 值引用和 r 值引用。
至于为什么它正确地调用派生函数,那是因为你在调用一个虚函数。动态调度照常进行。
这与使用带有 r 值引用参数的函数调用相同:
void callHi(Base&& b){
b.say_hi();
}
...
callHi(Derived{}); // ultimately calls derived say_hi method
你提到切片。为了进行切片,事件的顺序比简单地调用虚函数要复杂一些。
相关文章:
- 如何优雅地切片对象
- 避免矢量中的对象切片<Base><shared_ptr>
- 从 std::vector<无符号字符>切片中提取 int?
- 专门化模板覆盖函数/避免对象切片
- 我如何告诉叮叮当当的整洁切片特定类是可以的?
- FFMPEG:sws_scale返回错误:切片参数 0, 2160 无效
- 如何在 c++ 中进行 python 样式的字符串切片
- Valarray 切片数组与 'operator*' 不匹配
- 如何在C++中实现切片运算符[]?
- C++:在进行切片时对迭代器的约定,特别是对于访问最后一个元素并最终将其删除
- 防止在按值传递对象(继承)时进行切片
- CUDA 高效的 nd-array(张量)切片
- 使用vtkImageReslice重新切片三维原始图像
- 如何组合切片、模板和非派生类
- 当比特数不是8的倍数时,使用切片8算法计算CRC
- 从右侧切片 Qstring
- C++ 被此代码与多态性、指针和对象切片混淆
- 使用虚拟变量对 std::vector 内部循环进行切片的最佳方法
- C++切片和虚拟析构函数
- 切片整数参数包