在 clang (主干)上,我可以转发声明一个对象,稍后将用constexpr
如下:
// Fwd-declarations
struct S;
extern const S s;
// (... later) definitions
struct S {};
constexpr S s {};
Gcc 4.8 不喜欢这样,告诉我前向声明和定义不同constexpr
-性。 gcc 说的是实话,还是这只是 gcc 的 bug?
我在 C++11 标准副本中找不到任何明确禁止的语言constexpr
- 声明和定义之间不匹配,但我确实看到语言明确禁止constexpr
与一起使用extern
(第 7.1.5 节),我还看到需要类级别初始化程序的语言static
constexpr
变量在类中。另外,由于效用constexpr
当变量或其类型的定义不可用时,会显着减少,我认为其意图可能是constexpr
必须定义变量(或者,对于static
类成员(已初始化)在声明时。
作为解决方法,也许您可以提供extern
变量的别名。这将允许您获取其地址,这是我能想到的前向声明允许的唯一事情。例如:
// .hpp file:
struct C;
extern C const &c;
// .cpp file:
struct C {
constexpr C() { }
};
constexpr C cc;
C const &c = cc;
旁注:我知道在 C++14 中,他们重新访问/正在重新访问constexpr
,所以它可能在 Clang 中工作,因为它正在实现 C++14 的一些草案规范。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)