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

initializing an auto type variable to zero. Is this type safe?

我对使用自动类型比较陌生,但最近在我的代码库中经常看到它。我不喜欢使用它的原因之一是因为我经常转发声明一些事情,据我所知,这不能用 auto 来完成。我的印象是这是因为类型是在编译时确定的。

我经常看到的就是这个,我不明白你为什么要这么做。

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

这样做有理由吗?

这里使用auto的缺点是,根据getValue()的return类型,多少会给人一种value类型的印象。其实这里用auto,跟写int value = 0;

是完全一样的

如果 getValue() 是 return 一个浮点数,也许在将来,人们可能会对为什么 value 不是一个浮点数感到困惑。

使用 auto 的好处是编译器会强制您对其进行初始化。

所以,归根结底,取决于风格和喜好。

在这种情况下使用 autoint 都不完美 - 因为值的类型是 "disconnected" 来自方法 returns 的类型。在这种情况下,可能 int 好一点,因为 value 的类型很清楚,而 auto 可能会给人错误的印象。更好的解决方案可能是:

 decltype(mValueStore.getValue(foo::bar::value)) value = 0;

但这很冗长,所以使用 auto 和条件运算符

会更好
 auto value = mValueStore.getValue( condition ? foo::bar::value : foo::bar::value2);

如果可能重写表达式,这样 value 将始终具有与该方法相同的类型 returns。