C++笔记

“对象的类型决定其操作”

第二章

1、在默认情况下,const对象被设定为尽在定义它的文件中有效(原因在C++ primer P54),如果需要在不同的文件中都有效,就必须在定义和声明前都加上extern。

//定义
extern const int bufferSize = 100;
//声明
extern const int bufferSize;

2、有一句话很有意思,“常量引用是对const的引用”,为何有意思?因为引用不是一个对象,它一旦绑定了一个对象,就不允许再修改绑定别的对象,这就有点常量那味了,所以从这层意思上理解有可以说所有引用都是常量,而常量引用实际上表达的是另一层意思,指这个引用指向一个常量。

3、常量引用可以与字面值常量绑定在一起,如下代码所示:

const int i = 10;
const int &r1 = i;
const int &r2 = 20;
/*
*上述代码相当于
*int temp = 20;
*const int &r2 = temp;
*/


const int &r3 = r1 * 20;
/*
*上述代码相当于
*int temp = 20;
*const int &r2 = temp;
*/

4、顶层const值指针本身是一个常量,底层const值指针所指向的对象是一个常量

5、constexpr非常有意思,与const不同,找天详细写写,P58-60

参考博文:C++11/14 constexpr 用法 - 简书

6、decltype的用法,像函数一样需要加括号,作用时使用括号中的变量或者表达式作为数据类型定义变量。

第三章

1、什么是拷贝初始化,什么是直接初始化?

        当使用等号“=”来初始化变量,就是拷贝初始化,正确来时是执行拷贝构造函数创建对象。不使用等号就是直接初始化,直接初始化的范围比拷贝初始化大多了。

2、string使用下标进行随机访问,一道典型的空间换时间实例,十进制转换成十二进制

const string hex_digits = "123456789ABCDEF";
decltype(hex_digits.size()) n;

std::cin >> n >> std::endl;

if(n <= hex_digits.size())
{
    std::cout << hex_digits[n-1] << std::endl;
}
else
{
    std::cout << "input error" << std::endl;
}

3、vector表示对象的集合,也可称为容器。实际上它是一个模板,我们可以把模板看做是编译器对生成类或函数的编写的一份说明,<>中的信息就是他的说明信息,vector<int> ivec指ivec中保存的对象类型时int。从它的用法的角度看,我们可以把它看成是可变长数组

4、范围for语句不应改变其遍历序列的大小,原理类似迭代器中一旦改变了遍历序列的大小,其iterator.end()就不正确了,对vector进行push_back()后,迭代器就会失效

5、两个指针相减的数据类型是ptrdiff_t,一种标准库类型,因为结果可能是负值,所以ptrdiff_t是带符号的

6、强制类型转换有static_cast,、dynamic_cast、const_cast、renterpret_cast

C++学习笔记涵盖基础部分、核心编程和提高编程等内容。 ### 基础部分 包括初识C++、数据类型、运算符、程序流程结构、数组、函数、指针、结构体等内容[^1]。 ### C++核心编程 包含引用、函数提高、类和对象、文件操作等内容。在结构体方面,C++的结构体成员除了可以是变量,也可以是函数。例如: ```cpp #include <iostream> using namespace std; struct Student { char name[32]; int age; float score; void fun() { cout << "姓名:" << name << endl; cout << "年龄:" << age << endl; cout << "成绩:" << score << endl; } void fun1() { cout << "上课了" << endl; } }; int main() { Student stu; cin >> stu.name; cin >> stu.age; cin >> stu.score; stu.fun(); stu.fun1(); return 0; } ``` 此代码定义了一个`Student`结构体,其中包含变量和函数成员,并在`main`函数中使用该结构体创建对象并调用其成员函数[^2]。 ### C++关键字 包含asm、do、if、return、typedef等众多关键字,这些关键字在C++编程中有特定的用途和语法规则[^3]。 ### C++常量 用于记录程序中不可更改的数据,使用语法有两种: 1. `#define`宏常量:`#define 常量名 常量值` 2. `const`数据类型 常量名 = 常量值; 示例代码如下: ```cpp #include <iostream> using namespace std; // 1. #define 宏常量 #define Day 7 int main() { // int Day = 14; // 如果修改常量的值,会报错,宏常量不可修改 cout << "一周有" << Day << "天" << endl; // 2. const修饰的常量 const int month = 12; // int month = 17; // 常量定义后不可修改值,程序报错 cout << "一年有" << month << "个月" << endl; system("pause"); return 0; } ``` 上述代码通过两种方式定义了常量,并展示了常量不可修改的特性[^4]。 ### C++提高编程 包含模板、STL等内容[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值