目录
1.引用变量 用作函数参数
引用变量的主要用途就是函数的形参。通过将引用变量用作参数,函数将直接使用原始数据,而不是副本。
按引用传递 允许被调用的函数访问调用者的变量,进行读写。这是C语言没有的特性(按值&按指针)。
19:40:30: Starting /home/cjh/Projects/Qt/ptr/build-ptr-Desktop_Qt_5_15_2_GCC_64bit-Debug/ptr...
MyVal: 10
MyVal: 15
在addition函数调用时,num就变成了MyVal的别名,值和地址完全一样。所以既能做input参数也能做output参数。
2. final关键字作用
final关键字主要作用于 类继承 和 基类的虚函数实现。
正常情况:
子类Tshirt的创建毫无问题。
final 用于类继承:说明该类不可继承
智能的IDE甚至在编译之前,就直接提醒:Clothes 类被final关键字声明为 不可继承。
final 用于基类的虚函数实现:说明该虚函数不可被子类进一步实现或修改。
3. 类成员函数在头文件定义
回顾一下:类成员函数定义在头文件,语法上是完全可以的,适用于一些小型的工具类。
当然最好还是创建cpp文件来实现成员函数的定义。
4. = delete
编译器默认会为一个类隐式的生成几个默认函数
- 默认构造函数
- 默认析构函数
- 默认拷贝构造函数
- 默认赋值函数
- 移动构造函数
- 移动拷贝函数
delete关键字可以显式的禁用默认函数和成员函数
参考:=delete 使用_wanxiu.的博客-CSDN博客_= delete;
5. sstream 格式转化神器
#include <sstream> 头文件中主要包含了stringstream容器,可以用来进行数据格式双向转换。
目前笔者在用的方法, 主要是基本类型转成字符串:
stringstream ss;
int a = 9;
float b = 1.33;
double c = 2.3654;
ss << a;
string str1 = ss.str(); // int 转变为string
...
ss << b;
string str2 = ss.str(); // float 转变为string
...
ss << c;
string str3 = ss.str(); // double 转变为string
跟C语言的%格式转化相比,优点是可以自动识别类型,自动化程度更高。
注意,每次要重用同一个stringstream容器时要进行清理标志位和内容重置:
ss.clear();
ss.str("");
不然会有残留数据。
此外,也可以把字符串转变为基本类型:
不过可见,原始也要做一点预处理工作,不然截断位置会有问题
参考:c++中的sstream_liuzubing的博客-CSDN博客_sstream
6. std::variant 模板
当使用C++这样强类型的语言来读取数据库或者与其他语言之间来交换数据时,它很有可能在一开始不能知道获取到的数据的具体类型,这个时候必须借助于变体类型读取数据。VARIANT数据类型就具有跨语言的特性,同时它可以表示(存储)任意类型的数据。
声明variant类型时,可以在<...>定义好所有可选项,则该变体类型的实例就可以是其中之一的种类。
holds_alternative<int>(v1) // 判断 此时v1的值是不是int
get<int>(v1) // 提取 实例的值有2种索引: 直接在<>填写类型
get<0>(v2) // 在<>填写序号,0开始
更多参考:std::variant - cppreference.com