constexpr与匿名名称空间

时间:2019-03-25 11:08:05

标签: c++ c++11 namespaces

以下两种创建const值的模式有什么区别?

constexpr int some_val = 0;

vs

namespace {
   const int some_val = 0;
}

我习惯了第二种方法,但是第一种等效吗?

1 个答案:

答案 0 :(得分:1)

未命名空间充当MultiModelLoaderFactory:变量的链接。

static

等效于:

namespace {
   const int some_val = 0;
}

static const int some_val = 0; 不会更改:Demo

现在我们可以比较constexprconst

  • 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