具体来说,标准状态是修改const对象是否是未定义的行为?

问题描述 投票:2回答:1

众所周知,以下示例表现出未定义的行为:

T const x = T();
T& r = any_suitable_conversion_to_Tref(x); // fine
r = T(); // UB

[const_cast确认为cppreference

const_cast使得可以形成实际上指向const对象的非const类型的引用或指针,或者实际上指向易失性对象的非volatile类型的引用或指针。通过非常量访问路径修改const对象,并通过非易失性glvalue引用volatile对象会导致未定义的行为。

但是,它没有说明例如c样式的转换,它不引用标准(cppreference通常从不引用)。

C ++标准到底在哪里禁止这样做?

c++ object language-lawyer const
1个回答
7
投票

C ++ 17标准在[dcl.type.cv] 10.1.7下的第10章“声明”中声明:

  1. [除非声明了mutable(10.1.1)的任何类成员都可以修改,否则在其生存期(6.8)内尝试修改const对象都会导致未定义的行为。
© www.soinside.com 2019 - 2024. All rights reserved.