前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ 20 学习笔记1 --From BiliBili.com

C++ 20 学习笔记1 --From BiliBili.com

原创
作者头像
BrianLee
修改2023-02-11 16:33:36
4180
修改2023-02-11 16:33:36
举报

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++中的宏:

代码语言: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,这是不允许的

但可以使用指针方式修改;

代码语言:c++
复制
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、

代码语言:c++
复制
Player* p0 = dynamic_cast<Player*>(actuallyEnemy);
if(p0)
{
   ...
}

3、转换失败,p0 = null;

4、转换成功,p0= Player的实例;CPP6:

CPP6:c++中的结构化绑定

代码语言:c++
复制
auto[name,age] = CreatePerson();
std::cout << name << std::endl;

CPP7: c++如何处理OPTIONAL数据

代码语言:c++
复制
#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:单一类型变量存放多种类型数据

代码语言:c++
复制
#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();
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CPP1、一个函数返回多个变量的方式:
  • CPP2:template
  • CPP3:c++中的宏:
  • CPP4:C++引用:
  • CPP5:c++ dynamic_cast:
  • CPP6:c++中的结构化绑定
  • CPP7: c++如何处理OPTIONAL数据
  • CPP8:单一类型变量存放多种类型数据
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档