将自动类型变量初始化为零.这种类型安全吗?
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
或 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
始终具有与该方法返回相同的类型。
在这里使用 auto
的缺点是,根据getValue()
的返回类型,它会在某种程度上给人一种value
类型的印象。其实有了auto
,在这里,和写int value = 0;
完全一样
如果getValue()
要返回浮点数,将来也许,人们可能会对为什么value
不是浮点数感到困惑。
使用 auto
的好处是编译器会强制您初始化它。
因此,归根结底,取决于风格和偏好。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何使用C++中可以具有多种数据类型的单个变量
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- C++ 类型类的变量声明不命名类型?
- 我可以使用在类构造函数中初始化的流类型的成员变量吗?
- 用不同类型重新定义变量
- 附加类型安全的子类std::string
- 什么是 c/c++ 中的类型安全
- 在模板类中使用'new'类型安全吗?
- C++ 根据给定的类型名从变量返回数据
- 使用函数模板返回类型 X 的变量的值
- 类型安全可变参数函数
- 类型安全 - all_of/ any_of/ none_of for std::tuple
- 为什么 c++ 编译器在对两种不同类型的数值变量使用"std::max()"函数时会出现错误
- 如何在具有模板函数的类中使用类型安全的联合(变体)
- 解析参数值 - 字符串和链接值(类型字符串的链接值)与(特定类型的)变量
- 将自动类型变量初始化为零.这种类型安全吗?
- 在 C++ 中强制实施类型安全,而无需使用额外的类
- 是否要确保一个线程修改的任何数据类型的共享变量对其他线程可见
- 无法汇总初始化类型结构的变量,其中包含在类模板中的位字段成员