C++ 学习笔记

学习 C++ 时做的一些笔记

Posted by Edger on January 7, 2019

1. 为什么尽量不要使用 using namespace std ?

主要是为了避免命名冲突,但是不宜因噎废食。

详见 【知乎】为什么尽量不要使用 using namespace std?

2. #include <> 和 #include "" 的区别

#include <> 先到系统目录中找头文件,如果没找到,再到当前目录下寻找。如果要引用像 stdio.h、stdlib.h 等标准的头文件,用 #include <> 这个方法。

#include "" 先到当前目录下寻找头文件,如果没找到,再到系统目录下寻找。如果要使用当前目录下自定义的头文件,则使用 #include "" 这个方法。

3. 在 C++ 中 main 函数前面为什么要加上数据类型,比如:int void ?

main 函数的返回值是返回给主调进程,使主调进程得知被调用程序的运行结果。

标准规范中规定 main 函数的返回值为 int,一般约定返回 0 值时代表程序运行无错误,其它值均为错误号,但该约定并非强制。

如果程序的运行结果不需要返回给主调进程,或程序开发人员确认该状态并不重要,比如所有出错信息均在程序中有明确提示的情况下,可以不写 main 函数的返回值。在一些检查不是很严格的编译器中,比如 VC, VS 等,void 类型的 main 函数是允许的。不过在一些检查严格的编译器下,比如 g++ , 则要求 main 函数的返回值必须为 int 型。

所以在编程时,区分程序运行结果并以 int 型返回,是一个良好的编程习惯。

4. # if condition … # endif

# if condition … # endif 可以用来实现注释,且可以实现嵌套,格式为:

1
2
3
# if condition
     code
# endif 

condition 为 0 时不执行 code 代码,当 condition 为 1 时执行 code 代码。

# if condition … # endif 有助于程序调试,测试时使用 # if 1 来执行测试代码,发布时使用 # if 0 来屏蔽测试代码。

condition 可以是任意的条件语句。

# if condition … # endif 还可以配合 else 使用。下面的代码如果 conditiontrue 执行 code1 ,否则执行 code2

1
2
3
4
5
6
7
# define condition 1

# if condition
     code1
# else
     code2
# endif

5. 常量和字面量

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。

6. 变量的声明和定义

定义包含了声明,但是声明不包含定义,如

1
2
int a = 0;     // 定义并声明了变量 a
extern int a;  // 只是声明了有一个变量 a 存在,具体 a 在哪定义的,需要编译器编译的时候去找。

函数也是类似,定义的时候同时声明。但如果只是声明,编译器只知道有这么个函数,具体函数怎么定义的要编译器去找。

1
2
3
4
5
6
void fun1();  // 函数声明

void fun1()   // 函数定义
{  
    cout << "fun1" << endl;
}

7. 变量左值放在等式的左边用来判空,以防出现逻辑错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "stdafx.h"

int  *a = NULL;

int main()
{

    if (a = NULL) // 赋值语句,并非判断语句
    {
        return false;
    }
    
    if (NULL = a) // !!!!ERROR  此处在程序编译阶段不通过,“=” 右边不能为变量名
    {
        return false;
    }
    
    if (a == NULL) // 可行,判断指针 a 是否为空
    {
        return false;
    }
    
    if (NULL == a) // 可行,判断指针 a 是否为空。在实际项目中,
                   // 为了防止将 “==” 误写作 “=” 推荐讲变量名写在右侧,
                   // 编译器可以帮助寻找错误
    {
        return false;
    }

    return 0;

}

8. 前 ++ 和后 ++ 总结

前 ++ 是先自加再使用,而后 ++ 是先使用再自加!