VS2015中C++ auto关键字使用疑问:单文档应用结果不符
为什么auto给你10而不是预期的20?
嘿,这个问题我碰过好多次了——先给你吃个定心丸:这绝对不是Visual Studio 2015的Bug,问题出在你对auto关键字推导逻辑的一个常见误解上。
我先猜一下你的代码大概是这样的(毕竟这是最容易踩这个坑的场景):
int main() { int myNum = 10; auto result = myNum; // 这里auto推导成了int,result是myNum的副本 myNum = 20; // 修改原变量的值 // 此时输出result,得到的是10而不是20 return 0; }
你对auto的核心误解
auto的默认行为是值语义推导——也就是说,它会默认把变量推导成原始类型的值类型,而不是引用类型。简单说,就是用auto声明的变量会创建一个原始变量的独立副本,和原变量完全是两个东西。你改原变量的值,副本根本不会跟着变。
怎么得到你想要的20?
如果你希望变量能和原变量“绑定”,跟着原变量的变化而变化,就得显式告诉auto要推导成引用类型:
- 用
auto&:推导为左值引用,直接绑定到原变量上 - 用
auto&&:推导为万能引用(根据上下文自动适配左/右值引用场景)
修改后的代码就会符合你的预期:
int main() { int myNum = 10; auto& result = myNum; // 现在auto推导成int&,result是myNum的引用 myNum = 20; // 输出result就能得到20了 return 0; }
额外说一句VS2015的auto支持
VS2015对C++11里的auto推导规则是完全符合标准的,除非你的代码涉及到模板嵌套、复杂类型推导这类边缘场景,否则这种值和引用的差异,基本都是因为没搞清楚auto的默认推导逻辑。
内容的提问来源于stack exchange,提问作者IssamTP
相关产品推荐
相关产品推荐

