在constexpr上执行const_cast的行为

时间:2018-07-10 16:34:08

标签: c++ c++17

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_castconstexpr对象上的行为?

0 个答案:

没有答案