【问题标题】:Why int *const p1; results in error while int *p1;works just fine?为什么 int *const p1;在 int *p1; 工作正常时导致错误?
【发布时间】:2016-01-14 23:28:51
【问题描述】:

我是 C++ 新手,正在尝试学习指针的概念。我很困惑为什么第三和第四个语句会导致错误而第一个和第二个工作正常。

int *p1; //Ok
const int *p1;//Ok
int *const p1; //error: default initialization of an object of const type 'int *const'
const int *const p1; //error: default initialization of an object of const type 'const int *const'

PS:我知道在声明它们时初始化所有指针或至少将它们的值设置为 nullptr 或 0 是一种很好的做法。我问这个问题是因为我想了解它背后的概念。

【问题讨论】:

标签: c++ pointers constants lvalue rvalue


【解决方案1】:

最后两个语句将指针本身声明为常量。你没有给他们价值。这使得它们非常无用,因为它们永远无法更改(如果它们是堆栈或类成员变量,它们甚至没有像 NULL 这样的定义值,所以它们实际上是无用的)。

【讨论】:

    【解决方案2】:

    具有顶级常量的非类类型必须在定义中初始化。

    第 3 行和第 4 行具有顶级 const,即无法修改 p1。第2行没有顶级constp1 可以修改,但int指向的不能。

    【讨论】:

      【解决方案3】:

      这不是良好做法的问题。
      您声明了几个指向 int 和 const int 的 const 指针(有关详细信息,请参阅here),在这两种情况下,您必须在定义它们时对其进行初始化。

      【讨论】:

        猜你喜欢
        • 2015-05-15
        • 2016-01-23
        • 2011-04-09
        • 2013-09-26
        • 1970-01-01
        • 2010-11-11
        相关资源
        最近更新 更多