Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;11_C++_C++11_C++14_Constexpr_Mutable - Fatal编程技术网

C++ C++;11

C++ C++;11,c++,c++11,c++14,constexpr,mutable,C++,C++11,C++14,Constexpr,Mutable,在C++14标准(ISO/IEC 14882:2014)中,在第5.19节第2段(重点)中添加了“不可变的”: 条件表达式e是一个核心常量表达式,除非根据抽象机器(1.9)的规则对e进行求值,将对以下表达式之一求值: [……] 左值到右值的转换(4.1),除非应用于 [……] 非易失性glvalue,指用constexpr定义的非易失性对象,或指此类对象的非可变子对象,或 因此,此代码在C++14中不正确: class A { public: mutable in

在C++14标准(ISO/IEC 14882:2014)中,在第5.19节第2段(重点)中添加了“不可变的”

条件表达式e是一个核心常量表达式,除非根据抽象机器(1.9)的规则对e进行求值,将对以下表达式之一求值:

  • [……]
  • 左值到右值的转换(4.1),除非应用于
    • [……]
    • 非易失性glvalue,指用constexpr定义的非易失性对象,或指此类对象的非可变子对象,或
因此,此代码在C++14中不正确:

class A {
    public:
        mutable int x;
};

int main(){

    constexpr A a = {1};
    constexpr int y = a.x;

    return 0;
}
但是,它在C++11中正确吗

这是缺陷报告(CD3),他们建议在其中添加不可变的

目前,文本类类型可以有可变成员。尚不清楚这是否会给constexpr对象和常量表达式带来任何特殊问题,如果是,应该怎么做

所以我认为这是正确的C++11代码。尽管如此,我尝试了使用-std=c++11的Clang和GCC,它们都输出了一个错误,表示常量表达式中不允许使用可变变量。但该约束是在C++14中添加的,而不是在C++11中

有人知道C++11中的代码是否正确吗


另请参见缺陷报告(CD3)。

这是C++11缺陷报告,然后需要修复C++11。只有DR、接受、DRWP和WP状态的这些问题不是C++国际标准的一部分。 符合C++11标准的编译器必须实现该DR

例如,由于DR 1579,这对示例发生了更改:


此示例取自:

这是C++11缺陷报告,然后需要修复C++11。符合C++11标准的编译器必须包含DR@danh这是一个完整且足够长的答案。请把它移到下面的盒子里。谢谢你的合作