constexpr可以与volatile结合使用吗?

用户名

以下代码段在Clang 3.5中运行正常,但在GCC 4.9.2中却无法正常运行:

int main()
{
    constexpr volatile int i = 5;
}

错误:

错误:此处不能同时使用“ volatile”和“ constexpr”

如果我检查Clang生成的程序集,它将5按预期显示

movl    $5, -4(%rsp)

在GCC中,constexpr int i = 5被优化掉了,但volatile int i = 5也显示5在装配中。volatile const int i = 5在两个编译器中编译。同时具有可变性和const的东西不是外国的概念。

哪个编译器符合标准?

沙菲克·雅格慕(Shafik Yaghmour)

是的,这是有效的,存在缺陷报告1688:为此提交的易失constexpr变量说:

当前的措辞似乎没有语言说明constexpr无法应用于volatile限定类型的变量。同样,在5.19 [expr.const]第2段中的措辞提到“用constexpr定义的非易失性对象”可能会导致人们推断允许组合,但是这样的变量不能出现在常量表达式中。目的是什么?

由于它不是缺陷(NAD而被拒绝,其回应和理由是:

该组合是有意允许的,并且在某些情况下可以用于强制进行常量初始化。

正如DR指出的那样,这样的变量本身不能在常量表达式中使用

constexpr volatile int i = 5;    
constexpr int y = i ;         // Not valid since i is volatile

[expr.const] / 2包括所有,使一个条件表达式不是核心常量表达式包括以下情况:

左值到右值转换(4.1),除非将其应用于

并且所有例外要求:

[...]指的是非易失性对象[...]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

可以在constexpr中使用std :: string吗?

可以是constexpr吗?

ps过滤器可以与AND而不是OR逻辑结合使用吗

量角器可以与PageFactory结合使用吗?

结合使用Reducer可以采取额外的措施吗?

可以将PermissionRequiredMixin和LoginRequiredMixin结合使用吗?

可以结合使用DT,formattable和Shiny吗?

我可以在 GKE 中将 StorageClass 与 PersistentVolume 结合使用吗?

可以在psql中结合使用-c和-v吗?

保存数据时可以结合使用SharedPreferences和Firestore吗?

使用C ++ constexpr可以创建符号重复吗?

您可以使用constexpr变量的地址吗?

可以在Cudafy.NET中使用volatile关键字吗?

我可以结合羊群和源头吗?

我可以总是结合@*程序块吗

'ps'可以结合流程吗?

可以添加“ constexpr”来改变行为吗?

虚函数可以是constexpr吗?

可以创建任意类型的 constexpr 链表吗?

我可以结合使用dplyr mutate_at和mutate_if语句吗?

我可以运行 taffydb 查询而忽略大小写而不将其与 like 结合使用吗

我可以结合使用LINQ和用于将对象添加到集合中的foreach吗?

我可以将强制变量与NULL结合使用吗?操作员?

可以在ES2015中将简写形式与胖箭头结合使用吗?

我可以在Dockerfile中结合使用COPY指令以最小化图像层数吗?

ES6对象速记符号可以与常规对象符号结合使用吗?

我们可以结合使用add_action()和apply_filters()吗?

我可以结合使用“重试”和“后备Polly”弹性策略吗?

我可以将可见性绑定中的多个属性与 MvvmCross 结合使用吗?