C++的一些回顾笔记

一个开发菜鸟对C++的知识回顾。

笔记地址

 

Hello C++

#include using namespace std; int main() { cout << "Hello, world!" << endl; return 0; }

 

查看GNU的C/C++编译器

$ g++ -v

 

C++ 环境设置教程 https://www.codercto.com/courses/d/2610.html

 

编译 & 执行 C++ 程序

接下来让我们看看如何把源代码保存在一个文件中,以及如何编译并运行它。下面是简单的步骤:

  • 打开一个文本编辑器,添加上述代码。
  • 保存文件为 hello.cpp。
  • 打开命令提示符,进入到保存文件所在的目录。
  • 键入 'g++ hello.cpp ',输入回车,编译代码。如果代码中没有错误,命令提示符会跳到下一行,并生成 a.out 可执行文件。
  • 现在,键入 ' a.out' 来运行程序。
  • 您可以看到屏幕上显示 ' Hello World '。

$ g++ hello.cpp $ ./a.out Hello World

 

 

C++中 "\n" 与 endl 的区别是什么?

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

例如:

std::cout << std::endl;

相当于:

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

必要情况下使用 endl 代替 '\n' 一般是个好习惯。

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

cout 流速度较慢,如果速度过慢可以用 库中的 printf() 格式化输出函数,不需要 using namespace std;。

#include int main() { printf("Hello World!\n"); return 0; }

 

 

C++ 保留关键字

if...else...等 https://www.runoob.com/w3cnote/cpp-keyword-intro.html

virtual是定义C++中虚函数的关键字

 

注释:

/* 这是注释 */ /* C++ 注释也可以 * 跨行 */ //还可以使用 #if false ... #endif #if true code1 #else code2 #endif

 

c++ 数据类型

不常用的类型(底层实际是typedef 定义的)

wchar_t :宽字类型(wide char type) wchar_t 实际上的空间是和 short int 一样。

size_t :整型类型 保存的是一个整数,用来记录一个大小(size)

ptrdiff_t :pointer difference type, 一种用来记录两个指针之间的距离的数据类型 。

 

可以用 typedef 来定义与平台无关的类型。

比如定义一个叫 FALSE 的浮点类型,在目标平台一上,让它表示最高精度的类型为:

typedef long double FALSE;

在不支持 long double 的平台二上,改为:

typedef double FALSE;

在连 double 都不支持的平台三上,改为:

typedef float FALSE;

也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。

typedef 与 #define 的区别

  1. 执行时间不同,安全检查不同。typedef 在编译阶段有效,由于是在编译阶段,因此typedef 有类型检查的功能。#define 则是宏定义,发生在预处理阶段,也就是编译之前,它只进行简单而机械的字符串替换,而不进行任何检查。

#define f(x) x*x

  1. 功能有差异。typedef 用来定义类型的别名,定义与平台无关的数据类型,与 struct 的结合使用等。#define 不只是可以为类型取别名,还可以定义常量、变量、编译开关等。
  2. 作用域不同。#define 没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用。typedef 有自己的作用域。
  3. 对指针的操作。二者修饰指针类型时,作用不同。

typedef int * pint; #define PINT int * const pint p1 = &i1; //p不可更改,p指向的内容可以更改,相当于 int * const p; const PINT p2 = &i2; //p可以更改,p指向的内容不能更改,相当于 const int *p;或 int const *p; pint s1, s2; //s1和s2都是int型指针 PINT s3, s4; //相当于int * s3,s4;只有一个是指针。

  1. 存储方式不同 宏定义是直接替换,不会分配内存,存储与程序的代码段中;const常量需要进行内存分配,存储与程序的数据段中
  2. 定义后能否取消 宏定义可以修改也可以通过#undef来使之前的宏定义失效,const常量定义后将在定义域内永久有效,切无法修改

 

 

C++ 变量类型

extern 关键字声明在变量和函数之前的说明。

  1. 作用在变量之前。变量只允许定义一次,但可以在多个文件中声明。
  2. 作用在函数之前

判断语句

if (NULL == a)//可行 ,判断指针a是否为空。在实际项目中,为了防止将“==”误写作“=”推荐讲变量名写在右侧,编译器可以帮助寻找错误

C++ 变量作用域

三个地方可以定义变量:

  • 在函数或一个代码块内部声明的变量,称为局部变量。
  • 在函数参数的定义中声明的变量,称为形式参数。
  • 在所有函数外部声明的变量,称为全局变量。从定义处开始至程序结束起作用,即全局变量存在有效作用域。

当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值。

笔记:

局部变量和全局变量的名称可以相同。但是在函数内的局部变量与全局变量是两个独立的变量,互不影响。(局部变量在局部中会替代全局变量)

#include using namespace std; int a = 10; int main() { int a = 20; cout << ::a << endl; // 10 cout << a << endl; // 20 return 0; }

static 全局变量:改变作用范围,不改变存储位置

static 局部变量:改变存储位置,不改变作用范围

 

常量笔记:

三种形式所显示的字符串是相同的

"hello, dear" "hello, \ dear" "hello, " "d" "ear"

把常量定义为大写字母形式,是一个很好的编程实践。

const 后的常量,程序对其中只能读不能修改。

c

你可能感兴趣的:(C++,C++)