C++ 基础特性
介绍C++ 基本特性,衍生高级篇内容。摘自«C++高级编程»。
特性
类型转换
float myFloat = 2.34'56'7;
int i1 = static_cast<int>(myFloat);
枚举(强/弱)
enum GN
{
King,
Queue
};
GN myEnum = GN::King;
if(myEnum == 0){} // 可比较
// 强枚举类型
enum class GM: unsigned long
{
KING,
QUEUE = 10
}
GM myEnumm = GM::KING;
if(myEnumm == GM::QUEUE) {} // 不可以直接与数字比较
函数
std::cout << __func__ << std::endl;
函数替换(trailing return type)
auto func() -> int
{
return ...
}
// 类型推断 auto
auto func() // 去掉拖尾
{
return ... // 第一次return必须为非递归调用
}
// decltype
int x = 123;
decltype(x) y = 1233;
数组
// C 风格数组
int myArr[] = {1,2,3};
int myArr1[2] = {0};
// <array> C++
std::array<int,3> myArr2 = {2,3,4};
std::cout << myArr2[0];
std::cout << "Size: " << myArr2.size();
int Arr[] = {1, 2, 3};
int Arr[3] = {};
int* Arr = new int[3];
堆栈与堆
堆栈和堆是内存开辟出来的区域。堆栈顶部为程序当前作用域,通常为当前执行函数,注当前函数中声明的变量占用顶部堆栈的内存。如果当前函数调用其他函数,其他函数将拥有自己的堆栈帧,从当前函数传递参数给其他函数,是通过堆栈帧间数据的拷贝。在堆栈上所分配的内存,不需要程序员释放,这个内存删除的过程将自动完成执行。
堆则是与当前函数/堆栈帧完全没有关系的内存区域。如果想要在函数结束后,仍然保留其中声明的变量,可以将变量放到堆中。必须确保释放在堆上所分配的内存。除了智能指针。
指针
int* myIntegerPointer = nullptr;
/// 使用new操作符分配内存
myIntegerPointer = new int;
/// 对指针解除引用 ???
*myIntegerPointer = 8;
// 释放内存
delete myIntegerPointer;
myIntegerPointer = nullptr;
问题
函数使用
头文件语法,包括标准库头文件略去”.h”
名称空间基本用法
语言基础 -循环语法
堆栈和栈
堆栈是每个函数独立的内存空间 退出了会自动回收动态分配的内存
堆是与当前函数/堆栈帧无关的其他内存空间 退出时需要自动释放动态申请的空间 否则容易导致内存泄漏等问题
动态分配数组
string *Arr = nullptr; Arr = new string[strlen(param_str)+1]; delete Arr; Arr=nullptr;
std::array<int,3> myArr = {1,2,3};
const的使用
指定不能够修改的参数
类中指定函数不能够修改类成员参数(mutable除外)
向函数/方法传入参数,传入const&比复制副本效率更高
引用的含义
只是引用变量的别名,不存在空引用,必须指向一块合法内存,引用需要在创建时初始化(区别于指针),一旦某个引用初始化为一个对象,就不可以指向另一个对象。
auto关键字
函数替换 auto func() -> int { // method…. }
类型自动转换
STL容器基本用法 (std::vector)
了解名称空间、使用流而非printf()、包含标准头文件
support
https://www.w3cschool.cn/cpp/cpp-pointers.html