Ste*_*mer 5 c++ constexpr c++11
我正在尝试使用外部链接创建名称空间范围常量
// in some include file:
namespace foo
{
constexpr double bar() { return 1.23456; } // internal linkage
constexpr double baz = 1.23456; // internal linkage
const double bing = 1.23456; // internal linkage
}
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
Lig*_*ica 10
是的,不是 ; 你可以使用extern:
[C++11: 3.5/3]:具有命名空间作用域(3.3.6)的名称具有内部链接(如果它的名称)
- 显式声明的变量,函数或函数模板
static; 要么,- 即明确地声明的变量
const或constexpr和既不显式声明extern也不先前声明为具有外部连接 ; 要么- 匿名联盟的数据成员.
所以:
namespace foo
{
extern constexpr double bar() { return 1.23456; }
extern constexpr double baz = 1.23456;
}
Run Code Online (Sandbox Code Playgroud)
在您的其他翻译单元中,您现在应该能够声明函数的名称并引用它:
#include <iostream>
namespace foo
{
extern constexpr double bar();
}
int main()
{
std::cout << foo::bar() << '\n';
}
Run Code Online (Sandbox Code Playgroud)
然而,对于规则constexpr 的变量声明,你不能有一个声明,是不是也有定义:
[C++11: 7.1.5/9]:constexpr对象声明中使用的说明符将对象声明为const.这样的对象应具有文字类型并应初始化.[..]
所以,你不能采取相同的方法baz.
| 归档时间: |
|
| 查看次数: |
955 次 |
| 最近记录: |