C++ Primer Lippman 5th 练习 2.27 b

Posted

技术标签:

【中文标题】C++ Primer Lippman 5th 练习 2.27 b【英文标题】:C++ Primer Lippman 5th exercise 2.27 b 【发布时间】:2017-06-05 22:17:16 【问题描述】:

C++ 入门练习 2.27 第 5 版。 练习:以下哪些初始化是合法的?解释原因。

(b)int *const p2 = &i2;

根据以下规定,这是合法的: https://github.com/Mooophy/Cpp-Primer/tree/master/ch02#exercise-227

我没有看到i2 的声明位置? (我也看过勘误表。)

【问题讨论】:

p2 被声明为指向整数的const 指针,并使用i2 的地址进行初始化 您的参考资料显示了i2 的声明 p2 的声明之后,但这当然没有帮助。如果没有看到书中的练习(我没有),就不可能说出来。 @Zakir:是的,但我们不知道i2 是什么(除非它指的是在p2 声明之后 显示的声明)。更正:p2 被声明为指向const int 的指针;指针不是const。如果i2const int 是合法的,如果i2 是非const int 是非法的。 【参考方案1】:

它利用了* 与名称而不是类型一起使用的事实。

上面的问题将i2声明为整数

int* ip, ip2;

不是指针。所以

 int *const p2 = &i2;

p2 被分配了 i2 的地址,一个指针。 除非您尝试更改 p2 的值,否则 p2 的 const 指针不会发挥作用。

【讨论】:

以上是关于C++ Primer Lippman 5th 练习 2.27 b的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 0x0D 练习题解

C++ Primer 0x08 练习题解

C++ Primer 0x09 练习题解

C++ Primer 5th笔记(chap 18 大型程序工具)使用命名空间成员

C++ Primer 5th笔记(chap 18 大型程序工具)命名空间

C++ Primer 5th笔记(chap 19 特殊工具与技术)嵌套类