练习2.33 和练习2.34
#include <iostream>
using namespace std;
int main() {
int i = 0, & r = i;
auto a = r; // a是一个整数
cout << "a = " << a << endl;
const int ci = i, & cr = ci;
auto b = ci; // b是一个整数
cout << "b = " << a << endl;
auto c = cr; // c是一个整数
cout << "c = " << a << endl;
auto d = &i; // d是一个整型指针
auto e = &ci; //e是一个指向整数常量的指针
auto &g = ci; //g是一个整型常量的引用,绑定到ci
//auto& h = 42; //错误,不能为非常量引用绑定字面值
cout << "g = " << a << endl;
const auto& j = 42; //正确,可以为常量引用绑定字面值
auto k = ci, & l = i; //k是整数,l是整型引用
auto& m = ci, * p = &ci; //m是对整型常量的引用,p是指向整型常量的指针
a = 42; //正确
cout << "a = " << a << endl;
b = 42; //正确
cout << "b = " << a << endl;
c = 42; //正确
cout << "c = " << a << endl;
//d = 42; //不正确,不能将int类型的值分配到int *类型的实体
//e = 42; //不正确,不能将int类型的值分配到const int *类型的实体
//g = 42; //不正确,整型常量不可修改,左边错误
}
const int i = 42; //i是整型常量
auto j = i; //j是整数,顶层const被忽略
const auto &k = i; //k已经绑定const int了,第一个const没啥必要
auto *p = &i; //p是一个指向整型常量的指针
const auto j2 = i, &k2 = i; // j2是一个整型常量, k2本身就是const int了
#include <iostream>
using namespace std;
int main() {
const int i = 42; //i是整型常量
auto j = i; //j是整数,顶层const被忽略
cout << "j = " << j << endl;
j = 4200; //j的值可以被改变
cout << "j = " << j << endl;
}
#include <iostream>
using namespace std;
int main() {
const int i = 42; //i是整型常量
auto* p = &i; //p是一个指向整型常量的指针
cout << "p = " << p << endl; //输出对象地址
cout << "*p = " << *p << endl; //输出对象的值
const int j = 20;
p = &j; //更改指向的对象,证明不是常量指针
cout << "p = " << p << endl; //输出对象地址
cout << "*p = " << *p << endl; //输出对象的值
// *p = 40; 报错,不可通过指针更改常量对象的值
}
#include <iostream>
using namespace std;
int main() {
const int i = 42; //i是整型常量
const auto j2 = i, & k2 = i; j2是一个整型常量, k2本身就是const int了
//系统未报错,正确,均为整型常量
}