将auto类型变量初始化为零。这种类型安全吗?

时间:2018-01-19 20:19:46

标签: c++ auto type-safety

我对使用自动类型相对较新,但我最近在工作代码库中看到了很多。我不喜欢使用它的原因之一是因为我经常转发声明的东西,据我所知,不能用auto来完成。我的印象是因为类型是在编译时确定的。

我看到很多是这个,我不明白为什么你会这样做。

auto value = 0;
if ( condition 1 )
{
    value = mValueStore.getValue(foo::bar::value);
}
else
{
    value = mValueStore.getValue(foo::bar::value2);
}

是否有理由这样做?

2 个答案:

答案 0 :(得分:4)

在这种情况下使用autoint并不完美 - 因为价值类型是"已断开"从该方法返回的类型。在这种情况下,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的好处是编译器强制你初始化它。

因此,在一天结束时,取决于风格和偏好。