如何声明 constexpr extern?

新手上路,请多包涵

是否可以声明一个变量 extern constexpr 并在另一个文件中定义它?

我试过了,但编译器给出了错误:

constexpr variable ‘ i ’ 的声明不是定义

在.h中:

 extern constexpr int i;

在 .cpp 中:

 constexpr int i = 10;

原文由 coldbrew 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

不,你不能这样做,这是标准所说的(第 7.1.5 节):

1 constexpr 说明符应仅应用于变量或变量模板的定义、函数或函数模板的声明,或文字类型 (3.9) 的静态数据成员的声明。如果函数、函数模板或变量模板的任何声明具有 constexpr 说明符,则其所有声明都应包含 constexpr 说明符。 [注意:关于 constexpr 说明符,显式特化可能与模板声明不同。函数参数不能声明为 constexpr。 ——尾注]

标准给出的一些例子:

   constexpr void square(int &x);  // OK: declaration
  constexpr int bufsz = 1024;  // OK: definition
  constexpr struct pixel {  // error: pixel is a type
    int x;
    int y;
    constexpr pixel(int);  // OK: declaration
  };

  extern constexpr int memsz; // error: not a definition

原文由 swang 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题