【问题标题】:Cannot initialize a variable of type 'int *const' with an rvalue of type 'const int *' [duplicate]无法使用“const int *”类型的右值初始化“int *const”类型的变量[重复]
【发布时间】:2022-01-08 17:41:42
【问题描述】:

为什么我有以下代码的错误:

const int r = 3;
int *const ptr = &r;

但是,如果我将 r 定义为普通 int,它会正常工作。据我了解,第二行仅将指针 ptr 定义为 const,这意味着该指针的值不能更改。但是为什么我一个 const 指针不能指向一个 const int 呢?

【问题讨论】:

  • 根据 Cpp Primer 5th Ed 一书。简单的技巧是从里到外阅读它。 const int *ptr = &r; 可以被读取为指向常量整数的指针。但是,int *const ptr = &r; 可以读取为指向整数的常量指针。在您的情况下,r 是一个常量整数,但指针需要指向一个整数。希望这会有所帮助:)
  • @programmingRage 是的,它有帮助!谢谢

标签: c++ pointers variables constants


【解决方案1】:

The clockwise/spiral rule 表示定义

int *const ptr = &r;

使ptr 成为一个指向非常量 int 的常量指针。

也就是说,虽然变量ptr 本身不能修改(你不能分配给ptr),但它指向的内容可以。这与r 的类型不匹配,后者是常量。

如果你想要一个指向常量 int 的常量指针,你需要:

int const* const ptr = &r;

现在既不能修改变量ptr,也不能修改它指向的数据。

【讨论】:

  • 好吧,我更喜欢写const int *const ptr = &r;。这两种风格有区别吗?
  • @ProgrammingRage const int 是一个常量整数,int const 是一个常量整数。没有不同。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
  • 2012-01-07
相关资源
最近更新 更多