auto用于全局常量

Usage of auto for global constants

本文关键字:常量 全局 用于 auto      更新时间:2023-10-16

假设我有这样的东西:

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。如果类型的名称很长,那么这个关键字可能会很有用,但typedef通常是更好的解决方案。Auto模糊代码。此外,这有助于出错。有时,推导编译器的类型可能与您的意思不同。如果你愿意,你可以使用auto,但最好不要无故使用。

不,它们不一样。

键入时:

auto var = 123u;

它与相同

unsigned var = 123u;

实现

const unsigned var = 123u;

你应该写

const auto var = 123u;

不要对汽车期望过高。某种神奇的猜测。