相关疑难解决方法(0)

C++标准:命名空间范围的constexpr变量是否具有内部链接?

想象一下,我们有一个foo.h包含以下内容的标题:

#ifndef FOO_H_
#define FOO_H_

namespace foo {
constexpr std::string_view kSomeString = "blah";
}

#endif  // FOO_H_
Run Code Online (Sandbox Code Playgroud)

foo::kSomeString保证在任何翻译单元,包括内部联动foo.h?这在C++ 11和C++ 17之间有所不同吗?

在草案标准[basic.link]/3中

具有命名空间作用域的名称具有内部链接,如果它是非易失性const限定类型的非内联变量的名称,该变量既未显式声明为extern,也未声明为具有外部链接[...]

但我不知道是否constexpr算作"const-qualified".标准是否在某处说出来?

假设这保证具有内部链接,看起来ODR对此用法没有问题,对吧?(与此答案中的内容形成鲜明对比.)

c++ linkage language-lawyer c++11 c++17

15
推荐指数
1
解决办法
1514
查看次数

标签 统计

c++ ×1

c++11 ×1

c++17 ×1

language-lawyer ×1

linkage ×1