将自动类型变量初始化为零。这种类型安全吗?
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
的好处是编译器会强制您对其进行初始化。
所以,归根结底,取决于风格和喜好。
在这种情况下使用 auto
或 int
都不完美 - 因为值的类型是 "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。
我对使用自动类型比较陌生,但最近在我的代码库中经常看到它。我不喜欢使用它的原因之一是因为我经常转发声明一些事情,据我所知,这不能用 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
的好处是编译器会强制您对其进行初始化。
所以,归根结底,取决于风格和喜好。
在这种情况下使用 auto
或 int
都不完美 - 因为值的类型是 "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。