玩constexpr
并意识到我能够以与常规const对象几乎相同的方式消除constness:
#include <iostream>
int main()
{
// your code goes here
constexpr int foo = 10;
int* bad = const_cast<int*>(&foo);
*bad = 5;
std::cout<<*bad<<'\n';
return 0;
}
是否会打印5张纸,而令我惊讶的是它甚至被编译了? 但是,当使变量成为静态变量时,我感到更加困惑:
#include <iostream>
int main()
{
// your code goes here
static constexpr int foo = 10;
int* bad = const_cast<int*>(&foo);
*bad = 5;
std::cout<<*bad<<'\n';
return 0;
}
这将显示10,这意味着赋值运算符默默地失败了,再次在编译时没有警告。
标准中是否有一节解释const_cast
在constexpr
对象上的行为?