重学C++之《C++ Premer》课后习题第4章

练习4.16

if ((p = getPtr) != 0)
if (i == 1024)

练习4.20

vector<string> v_str{"1", "", "2", "3"};
auto iter = v_str.begin();
*iter++;         // 合法,返回iter的解引用,然后iter自加
(*iter)++;       // 不合法,string没有重载++运算符
*iter->empty();  // 不合法,先运算iter->empty(),无法对bool值进行解引用
iter->empty();   // 合法,调用v_str第一个字符串的empty函数
++*iter;         // 不合法,string没有重载++运算符
iter++->empty(); // 合法,调用v_str第一个字符串的empty函数,然后iter自加

练习4.21

vector<int> v{1, 2, 3, 4, 5, 6, 7};
for (auto &num : v) (num % 2) == 1 ? num *= 2 : 0;
for (const auto &num : v) cout << num << endl;

练习4.23

string s = "word";
// ?:优先级比+号低,要加括号
string p1 = s + (s[s.size()-1] == 's' ? "" : "s");

练习4.29

int x[10]; int *p = x;
cout << sizeof(x)/sizeof(*x) << endl; // 10,*x实际为一个int类型
cout << sizeof(x)/sizeof(*p) << endl; // 10

练习4.30

cout << sizeof f() << endl;         // 计算的是返回值类型的大小
int x = 1, y = 2;
unsigned long ans = sizeof (x + y); // +优先级低,需要加括号
cout << ans << endl;
ans = sizeof (x < y);               // <优先级低,需要加括号
cout << ans << endl;

练习4.31

vector<int> ivec;
ivec.resize(10);
auto cnt = ivec.size();
for (decltype(cnt) i = 0; i != ivec.size(); i++, cnt--) {
    ivec[i] = cnt;
    cout << cnt << endl;
}

练习4.32

  • 当is是false,x = 1,y = 2
  • 而is是true,x = 3,y = 3
    • 出现此现象的原因是逗号优先级最低,expr ? expr1, expr2 : expr3, expr4,其中expr ? expr1, expr2 : expr3可以看作是一整个表达式,当is=true,expr1, expr2执行,并且执行了expr3
int x = 2;
int y = 3;
bool is = true;
is ? ++x, ++y : --x, --y;
cout << x << endl << y << endl;

练习4.33

char cval;
int ival;
unsigned int ui;
float fval;
double dval;
cval = 'a' + 3;            // 'a' --> int, 'a'+3 --> char
fval = ui - ival * 1.0;    // ival --> double, ui --> double
dval = ui * fval;          // ui --> float
cval = ival + fval + dval; // ival --> float, ival+fval --> double

练习4.36

int i;
double d;
i *= static_cast<int>(d);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值