我对使用自动类型相对较新,但我最近在工作代码库中看到了很多。我不喜欢使用它的原因之一是因为我经常转发声明的东西,据我所知,不能用auto来完成。我的印象是因为类型是在编译时确定的。
我看到很多是这个,我不明白为什么你会这样做。
auto value = 0;
if ( condition 1 )
{
value = mValueStore.getValue(foo::bar::value);
}
else
{
value = mValueStore.getValue(foo::bar::value2);
}
是否有理由这样做?
答案 0 :(得分:4)
在这种情况下使用auto
或int
并不完美 - 因为价值类型是"已断开"从该方法返回的类型。在这种情况下,int
可能会更好一点,因为value
的类型很明显,auto
可能会给人留下错误的印象。更好的解决方案可能是:
decltype(mValueStore.getValue(foo::bar::value)) value = 0;
但是使用条件运算符
的auto
更加冗长
auto value = mValueStore.getValue( condition ? foo::bar::value : foo::bar::value2);
如果可能的话重写表达式,那么value
总是与该方法返回的类型相同。
答案 1 :(得分:2)
在这里使用auto
的缺点是它可能会在某种程度上给出value
类型的印象,具体取决于getValue()
的返回类型。事实上,对于auto
,这里与写int value = 0;
如果getValue()
要返回一个浮点数,将来也许可能会混淆为什么value
不是浮点数。
使用auto
的好处是编译器强制你初始化它。
因此,在一天结束时,取决于风格和偏好。