[英]Usage of auto for global constants
假设我有这样的事情:
namespace {
const unsigned MY_UINT = 100u;
const float MY_FLOAT = 0.f;
const char* MY_STRING = "Hello World";
}
通过使用auto
可以得到预期的行为吗? 我认为这是一种改进,但实际上我不确定。
namespace {
auto MY_UINT = 100u;
auto MY_FLOAT = 0.f;
auto MY_STRING = "Hello World";
}
这两个代码示例在语义上是否相同? 这些会自动const
吗? 如果没有,我应该指定auto const
吗?
auto
的推导规则等效于按值模板参数推导。 通过值创建对象需要从初始值设定项中剥离引用和顶级cv限定符。 您的两个示例并不相同。 特别是,原语100u
的类型为unsigned int
,因此可以推导出为原语。 同样, 0.f
的类型为float
。
仅当不修改变量本身时,才添加const
才有意义。 如果要在程序中创建常量,则使用constexpr
可能更好。
是的,您必须手动将其指定为const
。
不,这不是一个好习惯。 通常,您不应该过度使用auto
。 如果type的名称很长,但是typedef
通常是更好的解决方案,则该关键字可能会有所帮助。 Auto
隐藏代码。 而且,这促进了错误。 有时,推断编译器的类型可能与您的意思不同。 如果需要,可以使用auto
,但最好不要无缘无故。
不,他们不一样。
当您键入:
auto var = 123u;
它与:
unsigned var = 123u;
达到
const unsigned var = 123u;
你应该写
const auto var = 123u;
不要期望汽车太多。 某种魔术般的猜测。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.