" constexpr"有什么区别?和#34;静态constexpr"头文件中非类型的变量?

时间:2017-02-03 10:31:11

标签: c++11 static header-files constexpr

我有一个头文件test.hxx,它将包含在多个翻译单元中。头文件如下:

namespace program_exec
{
static constexpr int DEFAULT_VAL = 0;

static constexpr char *name = "proc_exec";
}

我已将此头文件包含在多个翻译单元(* .cxx)中,并且工作正常。

但删除constexpr char*的静态前方会导致链接错误,即如果我将static constexpr char *name = "proc_exec"更改为constexpr char *name = "proc_exec";

我收到链接器错误,说

error: multiple definition of program_exec::name

但对整数进行相同的更改工作正常,即将static constexpr int = DEFAULT_VALUE;更改为constexpr int = DEFAULT_VALUE;

区别在于移除static** infront constexpr intconstexpr char*会产生什么影响?

请帮助我理解差异。非常感谢你提前。

[编辑]

将变量作为" 静态constexpr "在头文件中并在多个翻译单元中使用此头文件。每个翻译单元是否都有自己的变量副本(或)编译器是否通过优化它只保留一个副本?

因为在带有命名空间范围的头文件中使用静态变量具有内部链接,并且包含此头文件的任何转换单元都有自己的变量副本。

我的理解是否正确?

0 个答案:

没有答案