这篇文章主要是记录一些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”