预备知识
C++ C PLUS PLUS
C++之父:Bjarne Stroustrup (贝尔实验室)
标准版本:
C++98 C++03 C++11 C++14 C++17 C++20(最新标准)
Microsoft C++ 语言和标准库一致性表 --推荐使用最高版本VS2119:
https://docs.microsoft.com/zh-cn/cpp/overview/visual-cpp-language-conformance?view=msvc-160
可移植性:
https://www.cnblogs.com/decode1234/p/9275556.html
C++主流编辑器:(编译器流程:源代码 预处理器 编译器 汇编程序 目标代码 连接器 可执行程序)
GCC家族:Cygwin Mingw32 GNU C++
MS家族: VisualC++ 更新速度比较快,支持最新特性,需要VCRuntime,接近完美。
Xcode编译: Apple LLVM(Clang + Low Level Virtual Machine) compiler 4.2 / LLVM GCC 4.2(GNU Compiler Compiler)。
初级第一课
注释
单行注释 //
多行注释 /* */
预处理器:
井号(#)开头的预处理器指令(#include、#define)
1 # 转换token为引起来的字符串
2 ## 运算符用于连接两个token
预定义宏:
LINE 这会在程序编译时包含当前行号。
FILE 这会在程序编译时包含当前文件名。
DATE 这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。
TIME 这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。
iosteam文件: 标准输入/输出流对象
对象有:cin cout cerr clog / wcin wcout wcerr wclog
包含<iostream> :自动包含<ios>、<streambuf>、<istream>、<ostream>和<iosfwd>。
![](https://img.haomeiwen.com/i10337581/6d66251c05911714.png)
![](https://img.haomeiwen.com/i10337581/01a4d1485696ef05.png)
c++ 命名空间
- 命名空间的定义使用关键字 namespace
- 调用带有命名空间的函数或变量,需要在前面加上命名空间的名称
- name::code; // code 可以是变量或函数
- 您可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。
- 因此命名空间可由几个单独定义的部分组成的。一个命名空间的各个组成部分可以分散在多个文件中。
- 命名空间可以嵌套,您可以在一个命名空间中定义另一个命名空间。
namespace namespace_name1
{
// 代码声明
namespace namespace_name2
{
// 代码声明
}
}
// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;
// 访问 namespace:name1 中的成员
using namespace namespace_name1;
CIN COUT
![](https://img.haomeiwen.com/i10337581/cb0a65ba67baf5c8.png)
- cin是C++编程语言中的标准输入流对象,即istream类的对象。
- cin读取数据是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发cin的成员函数去读取数据。
- 使用前提:#include<iostream> using namespace std;
- 用cout输出时,用户不必通知计算机按何种类型输出,系统会自动判别输出数据的类型,使输出的数据按相应的类型输出。
局部变量和全局变量
- 局部变量:在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。
- 全局变量:在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。
- 在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。
- :: 是作用域符,是运算符中等级最高的。 ::name为全局作用域中变量,解决函数被覆盖的问题。也用在类作用域和命名空间作用域。
Const限定符
- const 是 constant 的缩写,本意是不变的,不易改变的意思。
- 用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。
- 可通过 const 前面加上 volatile 关键字。来达到不被编译器优化,改变const变量。
- const 修饰指针指向的内容,则内容为不可变量。 const int p = 8; // 8不可改变。
5.const 修饰指针,则指针为不可变量。int const p = &a; // p指向的地址不可被修改,内容可修改。 - const 修饰指针和指针指向的内容,则指针和指针指向的内容都为不可变量。const int * const p = &a; // 都不可被修改
7.自定义类型的参数传递,我们采取 const 外加引用传递的方法。避免复制构造消耗性能。// const Test&
8.const修饰成员函数,本质修饰的是this指针:void fun (const class *this, int a,int b);
网友评论