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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值