c++
luobaotai
爱好技术,醉心研究
展开
-
c++学习笔记:lvalues, rvalues, 左值引用, 右值引用(c++11起)
int a = 12;int b = a+1;int foo(){ return 2;}a--左值12--右值a+1--右值foo()--右值int foo(){ return 2;}foo() = 2;//错误。foo()是右值int& foo1(){ int a = 3 return a;}foo1() = 2;//正确,foo1()是左值int& a = 2;//错误,a为左值引用,不能赋右值co.原创 2020-12-24 11:15:07 · 126 阅读 · 0 评论 -
c++学习笔记:单例最优实现
#include <iostream>class Singleton {public: ~Singleton() { std::cout << "destructor called!" << std::endl; } Singleton(const Singleton&) = delete; Singleton& operator = (const Singleton&) = delete; static Singleton&.原创 2020-12-21 14:09:59 · 123 阅读 · 0 评论 -
c++学习笔记:variant实现多类型变量,替代optional
c++17可用variant,实现多类型变量。比起optional,自由度更高。如下代码判断一个数字是否大于5,如果大于5,输出bignumber,否则输出enum值#include <iostream>#include <variant>#include <string>enum class ErrorCode { BIGNUMBER = 0, SMALLNUMBER=1, ERROR=2};std::variant<std::string,原创 2020-12-19 10:18:20 · 412 阅读 · 1 评论 -
c++学习笔记:dynamic_cast
对于父类Entity,有两个子类:Player,Enemy。如果定义一个 Entity* 类型变量,如下Entity* actuallyEnemy = new Enemy();即用Enemy类的构造函数为变量赋值,默认会发生子类向父类的类型转换,不会有问题如果此时将该变量赋给Player类型的指针,就会出问题Player* player = actuallyEnemy;为了避免这种错误的类型转换,需要用到dynamic_castPlayer* p0 = dynamic_cast原创 2020-12-16 10:13:48 · 131 阅读 · 0 评论