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

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

本文关键字:类型安全 类型变量 初始化      更新时间:2023-10-16

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

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

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

这样做有理由吗?

在这种情况下

使用 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始终具有与该方法返回相同的类型。

在这里使用 auto 的缺点是,根据getValue()的返回类型,它会在某种程度上给人一种value类型的印象。其实有了auto,在这里,和写int value = 0;完全一样

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

使用 auto 的好处是编译器会强制您初始化它。

因此,归根结底,取决于风格和偏好。