C++ Primer(第五版) 2.4--2.5.3节练习

本文详细解答了C++ Primer第五版2.4至2.5.3节的部分练习,涉及const对象的初始化、引用绑定规则、指针与常量的交互、auto和decltype的用法等核心概念。

2.26    (a)错误,const对象必须初始化;
           (d)错误,const对象的值不能再改变。

2.27    (a)错误,非常量引用不能绑定到字面值;
           (b)合法;
           (c)合法,常量引用可以绑定字面值;
           (d)合法,p3指向的值和自身都不能改变;
           (e)合法;
           (f)错误,引用不是对象,不能让引用不变;
           (g)合法。

2.28    (a)非法,cp必须初始化;
           (b)非法,p2必须初始化;
           (c)非法,ic必须初始化;
           (d)非法,p3必须初始化;
           (e)合法。

2.29    (a)合法; (b)合法; (c)非法,普通指针p1不能指向常量;
           (d)非法,p3定义后不能再赋值; (e)非法,p2不能再赋值; (f)非法,常量ic不能赋值。

2.30    v2:顶层const; p2:底层const; p3:顶层const;r2:底层const。

2.31    r1 = v2;  //合法
           p1 = p2;    //非法,非常量指针不能指向常量    p2 = p1;    //合法
           p1 = p3;    //非法,非常量指针不能指向常量    p2 = p3;    //合法,p2和p3都是底层const

2.32    非法,int变量直接赋给指针是错误操作,即使其为0也不行。

2.33    auto会忽略顶层const,保留底层const,前三条语句正确;
           d = 42;    //错误,d是指针;
           e = 42;    //e是指向整数常量的指针
           g = 42;    //g是一个常量引用,不能修改其值

2.34    

#include <iostream>

using namespace std;

int main()
{
	int i = 0, &r = i;
	auto a = r;
	
	const int ci = i, &cr = ci;
	auto b = ci;
	auto c = cr;
	auto d = &i;
	auto e = &ci;
	auto &g = ci;

	a = 42;
	b = 42;
	c = 42;
/* 错误语句
	d = 42;
	e = 42;
	g = 42;
*/
	
	return 0;
}

2.35    i:整型常量;    j: 整型;    k:整型常量;    p:指向整型常量的指针;   j2:整型常量;    k2:  整型常量

2.36    a: int;    b: int;    c: int;    d: int &;   a = 4; b = 4; c = 4; d = 4;

2.37    a: int;    b: int;    c: int;    d: int &;    a = 3; b = 4; c = 3; d = 3;   
           decltype(a = b),a = b作为参数,只推断类型,不计算结果。

2.38    auto:计算变量初值推断其类型;decltype只分析表达式得到类型,并不计算;
           auto:   忽略顶层const;decltype: 保留顶层const;
           decltype给变量加上括号,将得到引用类型。
           例如:int a = 0;    auto b = a;     decltype(a) c;    //类型一样
                      const int b = 2;    auto e = d;    decltype(b) e;    //d为int, e为const int,类型不一样
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值