mat*_*ati 8 c++ static const member const-cast
以下代码使用GCC(4.2-4.6)和Clang(2.1)编译得很好,但是当我运行可执行文件时,它给出了"总线错误:10".我不明白原因.
#include <iostream>
struct A
{
static int const v;
A() { ++*const_cast<int *>(&A::v); }
};
int const A::v = 0;
int main(int argc, char * argv[])
{
A a, b, c;
std::cout << a.v << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
pmr*_*pmr 12
我认为相关的引用是:
N3242的第7.1.6.1(4)段:
除了可以修改任何声明为mutable的类成员之外,任何在其生命周期内修改const对象的尝试都会导致未定义的行为.
这些例子说明了这一点const_cast.正如James所指出的那样:引用可以在C++ 03标准的§7.1.5中找到.
一点点阐述:该语言规则允许编译器在声明某些内容时使用只读内存(如果它在目标体系结构上可用)const.如果没有这个规则const- 永远不会出现任何后果,而且使用它只会是开发人员纪律的问题.它的方式至少可以告诉人们他们正在调用UB,这通常是一个很好的威慑.它const_cast本身具有较小的相关性,因为无论你如何欺骗编译器让你操纵一个const对象.
| 归档时间: |
|
| 查看次数: |
2007 次 |
| 最近记录: |