当前位置:  开发笔记 > 编程语言 > 正文

C ++ 11中ConstExpr对象中的可变成员

如何解决《C++11中ConstExpr对象中的可变成员》经验,为你挑选了0个好方法。

在C ++ 14标准(ISO / IEC 14882:2014)中,第5.19节第2款(强调我的)中添加了“ 不可更改 ”一词:

条件表达式 e是一个核心常量表达式除非e的评价,如下所述抽象机(1.9),将评估下面的表达式中的一个的规则:

[...]

左值到右值转换(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)1405,他们提议在其中添加非可变的

当前,文字类类型可以具有可变成员。尚不清楚这是否会对constexpr对象和常量表达式造成任何特殊的问题,如果是这样,应该如何处理。

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

有谁知道该代码在C ++ 11中是否正确?

另请参阅缺陷报告(CD3)1428。

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有