【发布时间】:2026-01-28 00:50:02
【问题描述】:
我正在阅读 Scott Meyers 的《Effective modern C++》。第 1 项包含以下示例:
template<typename T>
void f(T& param); // param is a reference
int x = 27; // x is an int
const int cx = x; // cx is a const int
f(cx); // T is const int,
// param's type is const int&
在第 3 项中出现以下示例:
Widget w;
const Widget& cw = w;
auto myWidget1 = cw; // auto type deduction:
// myWidget1's type is Widget
根据第 1 项,我预计 myWidget1 的类型是 const Widget。我错过了什么吗?
【问题讨论】:
-
auto&等同于T& -
@Piotr Skotnick:谢谢!
-
在我所谓的“正确表达式”上,在
=的右侧(普通赋值,复制初始化)和按值参数传递,const 无关紧要;在 ref 绑定的=右侧,const 确实很重要。 -
尝试使用
T param(即没有参考),然后你会看到与auto myWidget1的相似之处......或者使用auto & myWidget1与T & param相同。
标签: c++ c++11 reference auto effective-c++