繁体   English   中英

全局常量使用auto

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM