auto用于全局常量

时间:2014-11-12 22:14:05

标签: c++ c++11 auto

假设我有这样的事情:

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吗?

3 个答案:

答案 0 :(得分:3)

auto的演绎规则等同于按值模板参数演绎。按值创建对象需要从初始化程序中剥离引用和​​顶级cv限定符。你的两个例子并不等同。特别是,原始100u的类型为unsigned int,因此它被推断为。同样,0.f的类型为float

如果不修改变量本身,则添加const才有意义。如果您想在程序中创建常量,使用constexpr可能会更好。

答案 1 :(得分:1)

是的,您必须手动指定const

不,这不是一个好习惯。您通常不应过度使用auto。如果类型名称很长,那么该关键字会很有用,但typedef通常是更好的解决方案。 Auto掩盖了代码。而且,这有利于错误。有时,推断编译器的类型可能与您的意思不同。 如果您愿意,可以使用auto,但如果没有理由,最好不要这样做。

答案 2 :(得分:1)

不,他们不一样。

键入时:

auto var = 123u;

与以下内容相同:

unsigned var = 123u;

要实现

const unsigned var = 123u;

你应该写

const auto var = 123u;

不要期望汽车太多。某种神奇的猜测。

相关问题