c++ - 对全局常量使用 auto

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

最佳答案

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

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

关于c++ - 对全局常量使用 auto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26897671/

相关文章:

c++ - GenICam::gcstring 来自 int

c++ - 嵌套的基于范围的 for 循环

c++ - 为什么在创建内置数组的模板函数中不允许使用 auto?

c++ - 为什么 std::move 当类型已经是 T&& 类型时

C++ - 自动返回引用和非引用类型

c++ - C++ 中的“自动”声明问题

C++ char序列函数总是返回空字符串

c++ - 在 C++11 中,原始字符串文字可以有多行吗?

c++ - 安装 cocoa pod 后,现有静态库不使用 libssl.a 进行 tls 连接并且访问权限不佳

c++ - unordered_set 的散列自定义指针类型