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
。如果类型的名称很长,那么这个关键字可能会很有用,但typedef
通常是更好的解决方案。Auto
模糊代码。此外,这有助于出错。有时,推导编译器的类型可能与您的意思不同。如果你愿意,你可以使用auto
,但最好不要无故使用。
不,它们不一样。
键入时:
auto var = 123u;
它与相同
unsigned var = 123u;
实现
const unsigned var = 123u;
你应该写
const auto var = 123u;
不要对汽车期望过高。某种神奇的猜测。
相关文章:
- C++:实现一个全局常量,其值由用户给出
- 对全局变量的非常量引用的初始化无效
- 从模块导出全局常量的正确方法是什么?
- 全局变量中的静态常量与常量
- C++ 给出编译器错误,将一个(静态)常量全局变量设置为另一个静态常量变量
- 如何为 std::array 声明全局编译时常量?
- C++全局常量数组:是否保证合并(优化)到一个副本中
- 将全局变量作为常量引用传递
- 如何声明由标头中的函数初始化的全局常量
- 全局常量字符*上的错误LNK1169
- 类使用全局外部常量变量,该变量通过内部链接定义
- 静态、常量和全局变量带来的性能提升
- 编译单元之间共享的全局常量对象
- 在多线程c++服务器应用程序中处理非常量全局配置
- 从 DLL 导出全局常量变量
- 全局静态常量字符串不会初始化
- 常量全局变量的模板
- C++初始化:常量全局与静态类成员的顺序
- 命名空间中的常量全局变量
- 为什么C++中允许常量全局变量的多重定义,而C中不允许