2023 10 01 Cpp相关笔记

于 2023-10-01 发布 , 于 2023-10-01 更新

这篇文章主要是记录一些c++的笔记。起因是对于operator =的不确定,于是搜索,看到了Herb的CppCon视频。C++由于它的自由性,其实对于新手来说什么应该写、什么不应该写,是非常难以搞明白的。它的这个演讲主要就是一些基本的指导。

A Tour of C++

Argument passing跟copy initialization是相似的:检查参数类型,如果有需要就执行implicit转型。(page 15)

函数declaration的参数名字是无所谓的,编译器会自动忽视。(page 15)

让代码readable的方法之一就是把任务拆分成步(拆成function和class)并恰当命名。(page 15)

function overload需要注意保持行为一致性。(page 16)

char就是该平台上储存1个字符所占用的空间,其他类型都是char的倍数。(page 16)换句话说,1 char就是1 byte,就是8 bits。sizeof返回的是这个类型是char的几倍。

{} 和 =

{}初始化赋值可以避免意外的implicit conversion,而=就没有这个功能。(page 18)实际上它的效果是这样:

1
2
3
double d {1.1};
int i1 {1.1}; // error: narrowing conversion of ‘1.1000000000000001e+0’ from ‘double’ to ‘int’
int i2 {d};   // warning: narrowing conversion of ‘d’ from ‘double’ to ‘int’

=和{}的选择

写明type的用{},auto的用=。

const

constexpr是“编译时确定值”的意思。它只能接受在编译时就可以确定值的表达式,比如:

1
2
const int cint = 2;
constexpr double r = 1.4*square(cint);

如果想在constexpr上用function,那么这个function必须要有constexpr修饰,而且这种function应该非常简洁:只有一行return执行计算和返回值。这种function如果参数是const那么就是constant expression,反之亦然。(page 20)

const是runtime auarantees,而constexpr则是确保编译时evaluation。

CppCon 2014: Herb Sutter

原视频,Youtube:CppCon 2014: Herb Sutter “Back to the Basics! Essentials of Modern C++ Style”

目录