Emm*_*a X 8 c++ language-lawyer constexpr c++17
错误,我写了线沿线的东西constexpr bool{};
,虽然GCC和锵拒绝了这个,MSVC更乐意编译它(见Godbolt)。根据我的理解,在编译时评估的函数(以及构造函数)不会有副作用,因此这永远不会有任何影响,但它确实是格式错误的吗?
(根据我的经验,MSVC 往往是错误的,但在这种特定情况下,我没有找到标准禁止的地方。)
那只是无效的语法。由于它不是可能的语法产生式,因此被标准“禁止”。
声明如
constexpr bool b{};
Run Code Online (Sandbox Code Playgroud)
是一个简单的声明,语法为decl-specifier-seq init-declarator-list (opt) ;
(参见 C++17 [dcl.dcl]/1)。关键字constexpr
是一个decl-specifier,也是bool
(尽管只有一些 decl-specifiers 对类型有影响;bool
有,但constexpr
没有)。
声明的其余部分b{}
是一个init-declarator,它由一个声明符和一个可选的初始化程序组成,在本例中为{}
。(参见 [dcl.decl]/1。)声明符是b
. 通常,声明符必须包含一个标识符,例如b
. 参见 [dcl.decl]/4。
有一个类似的语法产生式,称为抽象声明符,它缺少标识符(参见 [dcl.name]/1)。在特定上下文中允许使用抽象声明符,例如在写下type-id 时,或在参数声明子句中(允许函数参数未命名)。但是,init-declarator必须包含declarator,而不是abstract-declarator。
也没有其他语法产生式可以匹配constexpr bool{};
。
归档时间: |
|
查看次数: |
152 次 |
最近记录: |