代码之家  ›  专栏  ›  技术社区  ›  Nivs

为什么我的代码覆盖常量int x=*(&y);工作

  •  -1
  • Nivs  · 技术社区  · 7 年前

    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    int z = 5;
    const int x = *(&z);
    
    int main()
    {
        cout << "A:" << x << ", " << &x << endl;
        int y = 7;
        cout << "B:" << y << ", " << &y << endl;
        memcpy((int*)&x, &y, sizeof(int));
        cout << "C:" << x << ", " << &x << endl;
    }
    

    输出为:

    A:5, 0x600f94
    B:7, 0x7a7efb68019c
    C:7, 0x600f94
    

    我不确定以前是否有人问过这个问题,因为我不知道在这种情况下应该搜索什么。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Michał Fita    7 年前

    回答您的问题:

    1. 这不安全;不应该这样做,这是一个例子 .

    2. 问题的最终答案 为什么有效? const int x memcpy() 分段故障

    在C++中,实常数由 constexpr 然而,还有其他影响。