【问题标题】:Diference between two code of: constant pointer to a constant integer initialization两段代码的区别:常量指针指向常量整型初始化
【发布时间】:2017-05-24 01:50:32
【问题描述】:

这两个代码有什么区别?

1.

const int ic = 2;
const int* const p3;
p3 = ⁣

2.

const int ic = 2;
const int* const p3 = ⁣

1 无法编译。 2 编译。对我来说,它看起来就像我们只是将常量整数的内存地址分配给指向常量整数的常量指针一样。我猜这与 C++ 中的初始化或约定有关。

编辑:error: assignment of read-only variable 'p3' 在第一个。我不明白为什么它甚至没有初始化时是只读的。根据 const 规则,值一旦初始化就不能更改,但这个甚至没有初始化。

【问题讨论】:

    标签: c++ initialization constants


    【解决方案1】:

    起初这可能有点令人困惑。这里有一个const 指向const int 的指针,所以变量本身(指针)是const。标记为 const 的所有内容都必须在构造(创建)时在 C++ 中初始化。在你的第一个 sn-p 中,你让它未初始化,

    const int* const p3; // const pointer un-initialized, error here
    

    所以这就是错误的原因。类似于尝试

    const int i; // won't compile
    i = 42; 
    

    你不能只定义一个const而不初始化它。

    【讨论】:

    • 这是否意味着 p3 在初始化时指向了某个任意位置?
    • @NimitPatel 不,不是那个意思。编译器根本不会接受代码。任何const 都必须在创建时进行初始化(因为编译器很可能会将值放在可执行文件的不同区域,例如只读区域)。
    猜你喜欢
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多