C++ Primer 中文第 5 版练习答案 第 2 章 变量和基本类型(27~42)

C++ Primer 中文版(第 5 版)练习解答合集

自己写的解答,如有错误之处,烦请在评论区指正!


  1. a. int &r = 0;不合法,不能用字面值初始化引用;
    b. 只要i2int类型或者const int类型就合法;
    c. 合法,r是一个常量引用;
    d. 只要i2int类型或者const int类型就合法;
    e. 只要i2int类型或者const int类型就合法;
    f. 不合法,如果本意是常量引用的话,首先应该去掉第二个const,其次常量引用必须初始化;
    g. 只要iint类型或者const int类型就合法;

  2. a. int *const cp;不合法,const类型必须初始化;
    b. int *const p2;不合法,const类型必须初始化;
    c. const int ic不合法,const类型必须初始化;
    d. 第 2 个const不合法,const类型必须初始化;
    e. 合法,p是指向常量的指针,本身不是常量,所以不初始化也可以。

  3. a. 合法;
    b. 不合法。p1是一个普通指针,而p3的第一个const表明这是个指向常量的指针;(要是合法的话就有可能通过p1修改一个常量的值,显然这是不允许的)
    c. 不合法。p1是一个普通指针,icconst对象;
    d. 合法。不能再把p3指向别的对象,同时也不能通过p3修改ic的值;
    e. 不合法。p2本身是const对象,初始化之后不能修改其值;
    f. 不合法。icconst对象,初始化之后不能修改其值。

对象名顶层 / 底层const
v2顶层
p2底层
p3同时是顶层和底层
r2底层
语句说明
r1 = v2;不合法。普通的int&不能绑定到const int上。
p1 = p2;不合法。p2具有底层const,而p1没有。
p2 = p1;合法。int*可以转换成const int*,但是不能通过p2修改其指向的值。
p1 = p3;不合法。p3具有底层const,而p1没有。
p2 = p3;合法。都具有底层const
  1. 非法。改为*p = nullptr;或者*p = 0;

a = 42;	// 合法
b = 42;	// 合法
c = 42;	// 合法
d = 42; // 错误,d 是整型指针
e = 42; // 错误,e 是指向整型常量的指针
g = 42; // 错误,g 是对常量的引用
  1. 见 33
变量名变量类型
iconst int
jint
kconst int&
pconst int*
j2const int
k2const int&
变量名变量类型程序结束时的值
aint4
bint4
cint4
dint&4
变量名变量类型
aint3
bint4
cint3
dint&3
  1. decltypeauto的区别:
    a. auto计算变量初始值来判断类型,而decltype直接分析表达式而不计算其值;
    b. auto会忽略顶层const,而decltype不会;
    c. decltype ((variable))的结果永远是引用,且如果decltype分析的表达式是赋值的话会生成左值类型的引用。

  2. [Error] expected ';' after struct definition

struct Sales_data {
	std::string ISBN;
	std::string book_type;
	unsigned units_sold;
	unsigned units_remain;
	double revenue;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值