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

练习 2.3

unsigned u = 10, u2 = 42;
cout << u2 - u << endl;     // 32
cout << u - u2 << endl;     // -32 % 2^32

int i = 10, i2 = 42;
cout << i2 - i << endl;     // 32
cout << i - i2 << endl;     // -32

cout << i - u << endl;      // 0
cout << u - i << endl;      // 0

// -32 % 2^32,同u-u2,2^32 = 4294967296
cout << (unsigned)(-32 % 4294967296) << endl;

练习 2.6

int month = 9, day = 7;  // 正常赋值
int month = 09, day = 07;  // day正常赋值,09超过八进制最大范围
  • gcc编译报错如下
test.cc:14:17: error: invalid digit "9" in octal constant
   14 |     int month = 09, day = 07;

练习 2.7

cout << 3.14e1L << endl; // 31.4
// Error unable to find numeric literal operator ‘operator""f’
cout << 1024f << endl;   // 可以改为 1024.0f
cout << 3.14L << endl;   // 3.14

练习2.11

extern int ix = 1024; // 定义,extren无效
int iy;               // 定义
extern int iz;        // 声明

练习2.12

// gcc 9.3.0
int double = 3.14; // false
int Double = 3.14; // true
int _;             // true
int catch-22;      // flase
int 1_or_2 = 1;    // false

练习2.13

int i = 42;
int main() {
    int i = 100;
    int j = i;   // j=100,使用局部变量
    j = ::i      // j=42, 使用全局变量
    return 0;
}

练习2.14

int sum  = 0, i = 100;
for (int i = 0; i != 10; ++i) sum += i; // 内层作用域的i覆盖外层的i
cout << i << " " << sum << endl;        // 输出 100 和 45

练习2.27

int i = -1, &r = 0;       // &r=0 error
// cannot bind non-const lvalue reference of type ‘int&’ to an rvalue of type ‘int’

const int i = -1, &r = 0; // true
const int i2 = i, &r = i; // true
const int *p1 = &i2;      // true
int *const p2 = &i2;      // error
// invalid conversion from ‘const int*’ to ‘int*’ [-fpermissive]

const int *const p3 = &i2; // true
const int &const r2;       // error
// ‘const’ qualifiers cannot be applied to ‘const int&’

练习2.28

int i, *const cp;      // cp未初始化

const int ic, &r = ic; // ic未初始化
const int *p;          // 合法,const限定的是p1指向的内容,即不能通过p1修改指向的内容,可以修改p1
const int *const p3;   // p3未初始化

练习2.35

const int i = 42;
auto j = i;                 // int
const auto &k = i;          // const int &
auto *p = &i;               // const int *
const auto j2 = i, &k2 = i; // const int j2, const int &
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值