c++实战遇到的一些坑,记录一下挺有意思的
vscode鼠标拖动代码页分栏失效/没反应

环境:windows
解决方法:cmd+shift+p 运行两次 Developer: Toggle Screencast Mode
if-else与++i --i

写if
最好先把else
也写上,i++
是语句结束后i+1
,++i
是立即加
左值与右值
左值:表达式左边的值,可以被查找到地址的、持久存在的值
右值:字面量,或者std::move
后的左值
左值引用:就是变量的别名

右值引用:绑定到临时、即将销毁的对象,使用方法int &&right
。意义就是避免内存操作
构造函数
构造函数就是一个类初始化的时候所需要的函数,主要分为以下几类
- 默认构造函数
- 带参数的构造函数
- 拷贝构造函数:可以实现对象的深拷贝和浅拷贝,省略
&
会导致无限递归
- 移动构造函数:接受一个右值引用(
std::move
)
- 转换构造函数
- 委托构造函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| class Base {
public: int val;
Base():val(int(0)) { std::cout << "默认构造函数. value is " << this->val << std::endl; }
Base(int v):val(v) { std::cout << "带参数的构造函数. value is " << this->val << std::endl;
}
Base(const Base& other): val(other.val) { std::cout << "拷贝构造函数. value is " << this->val << std::endl; }
Base(Base&& other) noexcept: val(other.val) { other.val = 0xFF; std::cout << "移动构造函数. value is " << this->val << std::endl; }
explicit Base(double v): val(static_cast<int>(v)) { std::cout << "转换构造函数. value is " << this->val << std::endl; }
Base(char v) : Base() { this->val = v; std::cout << "委托构造函数. value is " << this->val << std::endl;
}
~Base() {}; };
int main() { Base a; Base b(1); Base c(b); Base d(std::move(b)); Base e(3.124); Base f('A');
return 0; }
|
