以下两种创建const值的模式有什么区别?
constexpr int some_val = 0;
vs
namespace {
const int some_val = 0;
}
我习惯了第二种方法,但是第一种等效吗?
答案 0 :(得分:1)
未命名空间充当MultiModelLoaderFactory
:变量的链接。
static
等效于:
namespace {
const int some_val = 0;
}
static const int some_val = 0;
不会更改:Demo
现在我们可以比较constexpr
与const
:
constexpr
变量是在编译时已知的不可变值(因此可以在常量表达式中使用)constexpr
变量是不可变的值,可能会在运行时初始化。所以您可能有
const
但不是
int get_int() {
int res = 0;
std::cin >> res;
return res;
}
const int value = get_int();
最后,某些constexpr int value = get_int(); // Invalid, `get_int` is not and cannot be constexpr
值将被视为const
,
constexpr