《C++高级编程》中的收获

来源:互联网 发布:无线端来源我的淘宝 编辑:程序博客网 时间:2024/06/06 04:40

由于考研的需要,前些天在学校的图书馆里借了一本《C++高级编程》。看的过程中感觉自己以前好多没有学过或者没有注意的地方。下面是我看的过程中的一些收获。

1、切勿在头文件中使用using指令或using声明,否则每个人都会包含你的头文件。

2、数组来自于C,但仍能在C++中使用。但C++中有一种大小固定的特殊容器std::array,这个容器在<array>头文件中定义。好处:1)总是知道自身的大小 2)不会自动转换为指针从而避免了某些类型的bug 3)具有迭代器,可以方便的遍历元素。

3、与C不同,在C++中没有形参的函数仅需要一个空的圆括号,不需要使用void指出没有形参。然而,如果没有返回值,仍需要使用void来指明这一点。

4、类型推断有两个关键词:auto和decltype。

5、关键字auto:1)第一种函数是告诉编译器,在编译时自动推断变量的类型。2)第二种用法是用于替代函数语法。3)第三种是用于函数返回类型的推断。4)第四种用途是用于通用的lambda表达式。

6、关键词decltype把表达式作为实参,计算出该表达式的类型。

7、在堆栈上分配内存的变量不需要由程序员释放内存(删除),这个过程是自动完成的。

8、在任何时候都应该避免使用未初始化的变量,尤其是未初始化的指针,因为它们会指向内存中的每个随意位置。使用这种指针很可能使程序崩溃。这就是应显示同时申明和初始化指针的原因。如果不希望立即分配内存,可以把它们初始化为空指针nullptr。int* myIntegerPoint=nullptr;。使用new操作符分配内存:myIntegerPointer=new int; 在此情况下,指针箭头的方向寻找堆中实际的值。为了给堆中新分配的整数赋值,可用如下代码:*myIntegerPointer=8;

需要注意的是,这并非myIntegerPointer的值设置为8,在此并没有改变指针,而是改变了指针所指的内存。如果真需要重新设置指针的值,那么它将指向内存地址8,这可能是一个随机的无用单元,最终会程序会导致程序崩溃。

使用完动态分配的内存后,需要使用delete操作符释放内存。为防止释放指针指向的内存后在使用指针,建议把指针设置为nullptr。

delete myIntegerPointer;   myIntegerPointer=nullptr;

警告:在解除引用之前指针必须有效,对null或未初始化的指针解除引用会导致程序崩溃。