4.28
#include <iostream>
using namespace std;
int main()
{
cout << "char: " << sizeof(char) << endl;
cout << "short: " << sizeof(short) << endl;
cout << "int: " << sizeof(int) << endl;
cout << "long: " << sizeof(long) << endl;
cout << "float: " << sizeof(float) << endl;
cout << "double: " << sizeof(double) << endl;
return 0;
}
4.29 第一个表达式结果为10,对数组执行sizeof得到整个数组所占空间的大小,除以数组元素的大小得到数组元素个数;
第二个表达式结果为1,指针大小为4字节(不同编译环境可能不同),int大小也为4字节。
4.30 (a) sizeof (x + y); //sizeof优先级高于加法
(b) sizeof (p->mem[i]); //可以不添加括号
(c) sizeof (a < b); //sizeof优先级高于<
(d) sizeof (f()); //函数优先级高于sizeof,可以不添加括号
4.31 前置版本递增后直接返回改变了的运算对象,后置版本递增后返回原始值,前置版本更直接。本题使用后置版本得到相同的结果。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> ivec = {1, 2, 3, 4, 5, 6};
vector<int>::size_type cnt = ivec.size();
for (vector<int>::size_type ix = 0; ix != ivec.size(); ix++, cnt--)
ivec[ix] = cnt;
for (auto i : ivec)
cout << i << " ";
cout << endl;
return 0;
}
4.32 for循环先令ptr指向数组ia首元素,令ix = 0; 判断ix没有增加到size且ptr没有指向数组尾后元素,执行循环体,之后递增ix和ptr。
4.33 条件运算符优先级高于逗号运算符,所以该表达式等价于:
(someValue ? ++x, ++y : --x), --y
先判断someValue是否为真,为真则执行++x,++y,否则执行--x;最后再执行--y
4.34 (a) fval转换为bool类型;
(b) ival转换为float,求和后结果再转换为double;
(c) cval转换为int,与ival相乘后结果转换为double,再与dval相加。
4.35 (a) 'a'转换为int,求和后转换为char,赋值给cval;
(b) ival转换为double,ui转换为double执行减法,结果转换为float赋值给fval;
(c) ui转换为float,相乘后结果转为double,并赋值给dval;
(d) ival转为float,求和后转为double,求和后转为char,并赋值给cval。
4.36 i *= static_cast<int>(d);
4.37 (a) pv = static_cast<void*>(const_cast<string*>(ps));
(b) i = static_cast<int>(*pc);
(c) pv = static_cast<void*>(&d);
(d) pc = static_cast<char*>(pv);
4.38 将j/i的结果强制转换为double类型,并赋值给slope。
本文详细解析了C++ Primer第五版中4.28至4.38题的练习,涉及sizeof运算符、表达式优先级、递增操作、for循环、条件运算符、类型转换和静态类型转换等内容,旨在帮助读者深入理解C++的基础语法和操作。

5201

被折叠的 条评论
为什么被折叠?



