C/C++探秘(1)

目录

1.引用变量 用作函数参数

2. final关键字作用

3. 类成员函数在头文件定义

4. = delete

5. sstream 格式转化神器

6. std::variant 模板


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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值