前言
C++Primer 读书笔记,一个小白的自留地,欢迎大佬批评指正~
2.4 const限定符
默认状态下,const对象仅在文件内有效
#includeextern int a; extern const int b; int main() { std::cout << a << std::endl; std::cout << b << std::endl; //为了能够跨文件读取const,在声明和定义处都加上extern return 0; }
2.4.1 const引用
#includeint main() { int ci = 1024; const int &r1 = ci; //r1 = 100; //报错,r1是对常量的引用,不能通过r1进行修改 ci = 100; //通过ci修改可以 return 0; }
初始化和对const的引用
//int &r2 = 42; //报错,引用的是常量,前面得加const
const int &r2 = 42;
对const的引用 可能并非const的对象
2.4.2 指针和const
const 指针
2.4.3 顶层const
2.4.4 constexpr和常量表达式
int a = 20;
constexpr int b = a; //报错,检查到b不是常量表达式,因为b在运行时才能决定
const int a = 20; //常量表达式
constexpr int b = a; //因为a是常量表达式,所有这个没有问题
#includeint size() { return 30; } int main() { constexpr int c = size(); //此时报错,如果在int size()前加上constexpr语法就对了 return 0; }
指针和constexpr
与书上描述又点出入,编程时会报错,要进行一定的修改:
int main()
{
static int j = 10; //j本身不是常量,但是加上static修饰后,地址是常量
constexpr int* p1 = &j; //所以,这里拿j的地址给p1赋值,没有任何问题
j = 50; //地址是不会变,但是值是可以改变的,这个没有问题
std::cout << j << std::endl;
return 0;
}
2.5 处理类型
2.5.1 类型别名
指针、常量和类型别名
2.5.2 auto类型说明符 复合类型、常量和auto
int i = 0;
const int ci = i;
auto &g = ci;
//g = 20; //报错,这里能推断出来是顶层const,g不能改变
const auto &h = 42; //这里又推断不出来,根据编译提示修改
2.5.3 decltype类型指示符
decltype 和引用
2.6 自定义数据结构2.6.1 定义Sales_data类型
#ifndef SALES_DATA_H #define SALES_DATA_H #includestruct Sales_data { std::string bookNo; unsigned units_sold = 0; double revenue = 0.0; }; #endif
2.6.2 使用Sales_data类
#include#include "Sales_data.h" int main() { Sales_data data1, data2; double price = 0; std::cin >> data1.bookNo >> data1.units_sold >> price; data1.revenue = data1.units_sold * price; std::cin >> data2.bookNo >> data2.units_sold >> price; data2.revenue = data2.units_sold * price; if (data1.bookNo == data2.bookNo) { unsigned totalCnt = data1.units_sold + data2.units_sold; double totalRevenue = data1.revenue + data2.revenue; std::cout << data1.bookNo << " " << totalCnt << " " << totalRevenue << std::endl; if (totalCnt != 0) std::cout << totalRevenue / totalCnt << std::endl; else std::cout << "(no sales)" << std::endl; return 0; } else { std::cerr << "Data must refer to the same ISBN" << std::endl; return -1; } }
总结
默认状态下,const对象仅在文件内有效
const 指针
顶层const(头大)
指针和constexpr
decltype 和引用



