C++复习笔记——0_零碎问题及解决笔记

时间:2022-07-24
本文章向大家介绍C++复习笔记——0_零碎问题及解决笔记,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1. 怎么理解int main(int argc, const char *argv[])?

https://blog.csdn.net/yang_chengfeng/article/details/49406443https://blog.csdn.net/yang_chengfeng/article/details/49406443

2. nendl 的区别是什么?

n表示内容为一个回车符的字符串。std::endl是流操作子,输出的作用和输出 n 类似,但可能略有区别。 std::endl 输出一个换行符,并立即刷新缓冲区。 例如:

std::cout << std::endl;

相当于:

std::cout << 'n' << std::flush;
// 或者
std::cout << 'n'; std::fflush(stdout);

对于有输出缓冲的流(例如coutclog),如果不手动进行缓冲区刷新操作,将在缓冲区满后自动刷新输出。不过对于 cout 来说(相对于文件输出流等),缓冲一般体现得并不明显。但是必要情况下使用 endl 代替 n 一般是个好习惯。

对于无缓冲的流(例如标准错误输出流cerr),刷新是不必要的,可以直接使用 n

3. .cpp 以及 .h 文件的作用?

.h 中存放类的声明,函数原型(放在类的声明中)。 .cpp 存放函数体。 也就是说,一个存放声明(declaration),一个存放定义(definition)。 如果我们在一个头文件里声明了一个函数,当我们需要定义这个函数(这个定义是唯一的,也就是只能定义一次),或者需要使用这个函数时,我们在 .cpp 中需要 include 这个头文件。 同样地,如果我们在一个头文件里声明了一个类,当我们需要定义类里的成员函数,或者我们需要使用这个类时,我们在 .cpp 中需要 include 这个头文件。 对于类的设计者来说,头文件就像他们和类的使用者的一个合同,编译器会强化这一合同,它会要求你在使用这些类里的函数或结构时必须要声明。

4. include 中的<>以及" " 区别?

<> 先去系统目录中找头文件,如果没有在到当前目录下找。所以像标准的头文件 stdio.hstdlib.h 等用这个方法。 " " 首先在当前目录下寻找,如果找不到,再到系统目录中寻找。 这个用于 include 自定义的头文件,让系统优先使用当前目录中定义的。

5. "n" 以及 'n'区别?

"n" 表示一个字符串,只有一个数据是回车符。 'n' 表示一个字符。 这两个在输出上是一样的。

6. 是否使用using namespace std;?

真正的开发过程中, 尽量避免使用 using namespace std;等直接引入整个命名空间,否则会因为命名空间污染导致很多不必要的问题, 比如自己写的某个函数,名称正好和 std 中的一样, 编译器会不知道使用哪一个, 引起编译报错, 建议使用:

std::cout << "Hello World" << std::endl;

等直接由命名空间组合起来的全称。

7. C++如何输入包含空格的字符串?

对于C++字符串的输入我们看一下下面这段代码:

string s;      //定义空字符串
cin >> s;    //输入字符串
cout << s;   //打印

但我们会发现如果我们输入了还有空格的字符串,s里读入的字符串遇到空格回车tab都会结束,比如我们输入123 888,但实际输入到s里的只是123。可以使用getline(cin, s)或者字符串拼接函数当然也可以使用字符串拼接函数。 如下:

string inputStr;
getline(cin, inputStr);
cout << inputStr;

8. C++中引用(&)的用法和应用实例

https://blog.csdn.net/love_gaohz/article/details/7517891

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

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

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

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

10. C 语言 int main() 和 int main(void) 的区别?

int main(void)指的是此函数的参数为空,不能传入参数,如果你传入参数,就会出错。

int main()表示可以传入参数。

// 这样是正确的
int main()
{
  if (0) main(42);
}

// 这样会出错
int main(void)
{
  if (0) main(42);
}

在 C++ 中int main()int main(void) 是等效的,但在 C 中让括号空着代表编译器对是否接受参数保持沉默。在 C 语言中main()省略返回类型也就相当说明返回类型为 int 型,不过这种用法在 C++ 中逐渐被淘汰。虽然 void main()在很多系统都适用,但他毕竟不是标准的,所以应该避免这种用法, 应该使用这种int main(void) 的写法比较妥当。

11. 嵌套注释

在注释的时候使用 /* */ 的时候,是不支持嵌套注释的,如下

/*one /* two */*/

其输出就是*/, 会在第一个*/结束注释。 对此,我们可以使用#if 0 ... #endif来实现注释,具体实例如下:

#if 0
   code
#endif 

你可以把#if 0 改成#if 1 来执行 code 的代码。 这种形式对程序调试也可以帮助,测试时使用 #if 1 来执行测试代码,发布后使用 #if 0 来屏蔽测试代码。 #if后可以是任意的条件语句。 下面的代码如果 condition条件为 true 执行 code1 ,否则执行 code2。

#if 1
    cout << "OCMMENT STEP 1" << endl;
#if 1
    cout << "COMMENT STEP 1_1" << endl;
#else
    cout << "COMMENT STEP 1_2" << endl;
#endif
#else
    cout << "COMMENT STEP 2" << endl;
#endif

输出:

OCMMENT STEP 1
COMMENT STEP 1_1

12. typedef 说明

  • typedef 可以声明各种类型名,但不能用来定义变量。用 typedef 可以声明数组类型、字符串类型,使用比较方便。
  • 用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。 当在不同源文件中用到同一类型数据(尤其是像数组、指针、结构体、共用体等类型数据)时,常用 typedef 声明一些数据类型,把它们单独放在一个头文件中,然后在需要用到它们的文件中用 #include 命令把它们包含进来,以提高编程效率。
  • 使用 typedef 有利于程序的通用与移植。有时程序会依赖于硬件特性,用 typedef 便于移植。

13. typedef 与 #define 的区别

http://www.runoob.com/cplusplus/cpp-data-types.html