c++ - 使用构造函数进行引用初始化
问题描述
const T a {}; // constant of type T
const T& b {}; // ???
T c {}; // variable of type T
T& d {}; // error
a
和 和有什么不一样b
?
b
是一个引用,但我没有为其分配对象:在该指令中,我通过 T 构造函数对其进行初始化。
的地址b
在a和c的地址之间,所以看起来b
和a
没有区别。
如果我可以声明和初始化b
为什么d
会出现编译错误?
我谈到了泛型类型 T。我测试了上面的代码的原始类型和类,结果是一样的。
解决方案
在这些声明中
const T a {}; // constant of type T
const T& b {};
创建了默认初始化的常量对象和对默认初始化的临时对象的a
常量引用。b
编译器针对此引用声明发出错误
T& d {}; // error
因为声明了对临时对象的非常量引用。
您可以通过以下方式声明右值引用
T&&d {};
这是一个演示程序
#include <iostream>
int main()
{
const int &ri {};
std::cout << "ri = " << ri << '\n';
int && rri {};
std::cout << "rri = " << rri << '\n';
return 0;
}
程序输出为
ri = 0
rri = 0
推荐阅读
- azure - 我无法从数据块中的 spark 数据帧创建加载数据到 Azure Synapse (DWH)
- android - /mobile/mobile 应用代码/app/build/generated/not_namespaced_r_class_sources/debug/processDebugResources/r/android/arch/lifecycle/livedata/core 的索引
- python - 使用烧瓶部署时,我必须在哪里复制文件 style.css?
- javascript - event.value 和 event.target.value 的区别
- jquery - 材料设计需要获得现有芯片的价值
- c++ - 多个`cin`没有给出正确答案
- python - 我不断收到“只有大小为 1 的数组可以转换为 Python 标量”,但我不知道为什么
- node.js - 如何使用 ExcelJS 在 NodeJS 中附加现有的 Excel 文件
- reason - 是否可以使用 ReasonReact 构建单个组件?
- javascript - 可以在 Express 应用程序中停止执行带有 return 语句的异步路由处理程序吗?