C++ 20 学习笔记1 --From BiliBili.com
2023-03-07 09:08:44 时间
CPP1、一个函数返回多个变量的方式:
1、通过引用传递参数,函数内修改参数值后,函数外部自动改变;
2、通过指针传递参数,比引用传参好的点是,可以传nullPtr;
3、Tuple
4、Pair
5、std::array 取值麻烦,array.get<0>(sources);
不晓得这个0参数具体含义,不直观;
6、struct包装多个变量,return {x,y};
即可将x,y的值返回给调用方。
CPP2:template
1、类似java \c#中的泛型
2、template<typename T>;
3、template<typename T,int N>
4、调用时,才产生对应版本的代码COPY;
5、不能过渡使用;
CPP3:c++中的宏:
#include <iostream>
#include <string>
#define Log(x) std::cout << x << std::endl
int main()
{
Log(5);
Log("Hello");
std::cin.get();
}
\是Enter键的转义
CPP4:C++引用:
1、它是c++的语法糖
2、int a = 5;
int b = 8;
int& ref = a;
此时 ref = 5;它是a的别名;
3、不能修改ref的引用
ref =b,这是不允许的
但可以使用指针方式修改;
int a=5;
int b =8;
int * ref =&a;
(*ref)= 2;
int* p = &b;
(*p) = 1;
此时,a = 2,b =1;
CPP5:c++ dynamic_cast:
1、需要开启RTTI,会增加一定的开销
2、
Player* p0 = dynamic_cast<Player*>(actuallyEnemy);
if(p0)
{
...
}
3、转换失败,p0 = null;
4、转换成功,p0= Player的实例;CPP6:
CPP6:c++中的结构化绑定
auto[name,age] = CreatePerson();
std::cout << name << std::endl;
CPP7: c++如何处理OPTIONAL数据
#include <iostream>
#include <fstream>
#include <optional>
std::optional<std::string> ReadFileAsString(const std::string& filePath)
{
std::ifstream stream(filePath);
if (stream)
{
std::string result;
// read file
stream.close();
return result;
}
return {};
}
int main()
{
std::optional<std::string> data = ReadFileAsString("data.txt");
std::string value = data.value_or("Not present");
std::cout << value << std::endl;
if (data.has_value())
{
std::cout << "File read sucessfully!\n";
}
else
{
std::cout << "File coun't be opened!\n";
}
std::cin.get();
}
CPP8:单一类型变量存放多种类型数据
#include <iostream>
#include <variant>
int main()
{
std::variant<std::string, int> data;
std::cout << sizeof(std::string) << "\n";
std::cout << sizeof(int) << "\n";
std::cout << sizeof(data) << "\n";
data = "Brian";
std::cout << std::get<std::string>(data) << std::endl;
if (auto value = std::get_if<std::string>(&data))
{
std::string& v = *value;
std::cout << v << std::endl;
}
else
{
}
data = 2;
std::cout << std::get<int>(data) << std::endl;
std::cin.get();
}
相关文章
- 发现 Linux SpaceFM 文件管理器的威力
- 夯实数据智能底座 共筑数字经济发展“新基石”
- 五分钟教你使用console.log发布公司的招聘信息
- 微软发布 Windows 11 Beta 预览版 Build 22621.1250 和 22623.1250 (KB5023008)
- Windows 11 学院:在 Windows 11 Build 25290 上如何为文件管理器启用标签页拖拽支持
- 微软Windows 11 Dev 预览版 Build 25290 发布:带来新的开始菜单提醒角标
- 微软正用全屏通知提醒 Windows 10 用户免费升级 Windows 11,要点击 5 次才能退出
- Linux Mint 21.2 将于 6 月发布:改进登录屏幕,优化 Pix 图像管理程序等等
- 字节面试也会问SPI机制?
- 微软正式停售 Windows 10 产品密钥 / 许可证:继续提供 ISO 镜像下载,推荐用户升级 Windows 11
- 用复古电脑程序 Toy CPU 学习低级编程
- Windows 11 新功能泄露:现代音量合成器、实验工具和新的文件管理器
- 微软 Windows 11 文件资源管理器全新设计曝光:UI 迎来大修,整合 Microsoft 365
- 对比Pandas,学习PySpark大数据处理
- 微软宣布为Windows 11 21H2设备开启自动更新到22H2版本
- 互联网都在说降本增效,小红书技术团队是怎么做的?
- 微软将继续提供 Windows 10 ISO 镜像下载,即将停售产品密钥 / 许可证
- 微软宣布为Windows 11 21H2 设备开启自动更新到 22H2 版本
- 面试突击:Properties和Yml有什么区别?
- 微软 Windows 11 Beta 预览版 22621.1245 和 22623.1245 (KB5022358) 发布