C++]奇怪的语法

需要仔细的声明

int* a, b, c;
// 相当于
int* a;
int b;
int c;

这也太没有辨识度了,所以能不省略不要省略

// 同样初始化也是
int a = 0, b = 0, c = 0;
// 也可以这样
int a(0), b(0), c(0);

enum classenum的区别

主要是枚举作用域的区别,C语言中枚举的值的定义的作用域会提升到枚举类型所有的作用域,其实就是保证在作用域内,定义的值只能唯一。

enum Sex
{
    Man,
    Woman
};

// 此时再次定义枚举时使用`Man`或`Woman`时会有错误
// 编译器提示:错误,Man,Woman重定义
enum Sex
{
    Man,
    Woman
};

这个时候就要使用enum class来定义了

enum class
{

}

后自增与取值两个运算符的优先级

#include
using namespace std;
int main()
{
int a[]{ 12,3,5,6 };
int* p{&a[0]};
count << *p++ << endl;
count << *p;
}

打印的结果顺序是:
1. *p值为12。
2. p++指针指向数组第2个。
3. *p值为3。

## 定义纯虚函数
```cpp
virtual void GetSessionInterface() const = 0;

完善大括号初始化

C++11开始

int a{0};//初始化a=0
FString Name{TEXT("Hahaha")}

引用

// Declare声明阶段
int* p; // 说明这是个指针[Pointer]
int& r = xx ;// 说明这是个引用[Reference] 在声明阶段引用必须初始化

// 使用阶段
int a = 100;
int* p; //声明

p = &a; // &取地址
cout << *p<< endl // *取值

构造函数-析构函数

英语:constructordestructor
这两个是一对,在对象生成时先执行构造函数,在对象销毁时执行析构函数
那为什么要叫析构呢,主要是这个字,古字木斤表示用斧子劈开木头,代表分离,后也代表解除,所以这里指的是解除构造关系时触发的函数。

数组循环方法

int CountArr[4]=[1,2,3,4];
// 这里的int& 可以设置Count为引用,在这里修改它的值会影响到原来的CountArr
for(int& Count:CountArr){
	Count=Count*2;
}

局部静态对象

局部变量前static,在其他地方不能使用,但是这个变量并不会在函数使用完后被销毁,只在程序结束后销毁

int Sum(int a,int b){
// 这里如果没有static,这里的CallCount只是个局部变量
// 但是加上static这里的变量,虽然还是局部变量,在其他地方不能使用,但是这个变量并不会在函数使用完后被销毁,只在程序结束后销毁
	static int CallCount = 0;
	CallCount++;

	return a+b;
}

inline 内联函数

在编译阶段,把函数中的内容直接复制到使用这个函数的地方

常量表达式/常量表达式函数 constexpr

这个属于隐性内联函数,只是它是在编译阶段把这个函数计算的结果直接放在对应的地方

// 这个为 常量表达式
constexpr int num=5;
// 这个为 常量表达式函数
constexpr int fect(int n)
{
	return n==1?1:n*fact(n-1);
}

size_t类型 数组大小类型,其实是无符号int类型

正在编写中...

C++ new类对象家括号与不加括号的区别

  • 构造函数(编译器合成默认构造函数),也虚函数,
    class c = new class;,将不调用合成默认构造函数,
    class c = new class();则会调用合成默认构造函数。

  • 构造函数(由编译器合成默认构造函数)但虚函数,
    两者一样,都会调用合成默认构造函数。

  • 默认构造函数
    两者一样,都会调用默认构造函数。

评论