指针和数组 发表于 2023-10-11 更新于 2024-10-19 指针和数组C 语言中指针和数组这两个概念密不可分,以至于如果没有理解其中一个概念,就无法彻底理解另一个概念。 数组很基础的一些知识点我就不重复了。关于数组,需要注意的有两个点: C 语言中只有一维数组,而且编译期间就要知道数组的精确大小。数组的元素可以是任何类型的对象,当然也包含了数组,这也就是多维数组。 对于一个数组,我们其实只能干两件事情:确定数组的大小、获取指向该数组下标为 0 的元素的指针。看到这话你是不是要反驳我了:不对呀,你写博客写糊涂了吧?我还可以arr[1]的操作呀。其实[]操作的本质是通过指针来实现的。比如arr[i] = 1其实上是*(arr + i) = 1,这里的 arr就是指向该数组下标为 0 的元素的指针。 阅读全文 »
条款23:理解std::move 和 std::forward 发表于 2023-10-09 更新于 2024-10-19 须知std::move 不做任何移动, std::forward 不做任何转发。它们在运行的时候什么都没干。它们两个都只做了强制类型转换,std::move 无条件将实参强制转换成右值,std::forward 是有条件的执行强制类型转换。 阅读全文 »
条款 21 :优先选用 std::make_unique 和std::make_shared, 而非直接使用 new 发表于 2023-10-09 更新于 2024-10-19 使用std::make_shared的理由:代码精简1234auto upw1(std::make_unique<Widget>());std::unique_ptr<Widget> upw2(new Widget);auto spw1(std::make_shared<Widget>());std::shared_ptr<Widget> spw2(new Widget); 使用make系列函数只有一个Widget,代码风格不冗余。 阅读全文 »