所谓的“现代C++”,就是指C++ 11标准之后的C++语言,与之相对应的是“经典C++”,也就是C++ 98/03标准的C++语言。Unreal Engine 4使用C++14标准开发,用到了很多现代C++的特性,而且它不使用标准库,这可能就需要我们对现代C++理解的更清晰一点。于是,打算把自己对 ...
分类:
编程语言 时间:
2020-06-09 12:51:51
阅读次数:
78
#include <bits/stdc++.h> using namespace std; char cnt = 0; struct A { A() { *reinterpret_cast<char*>(this) = ++cnt; cout << "construct: " << this << ...
分类:
其他好文 时间:
2020-05-29 23:23:00
阅读次数:
71
原文 https://www.jianshu.com/p/d19fc8447eaa 写的太好了 c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。 左值、右值 C++中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的持久 ...
分类:
移动开发 时间:
2020-05-14 01:48:06
阅读次数:
78
其实对于 std::move来说,只做了一件事。可以初步的理解为 (不过当然是错误的) template<typename T>T&& move(T& val){ return static_cast<T&&>(val);}12345move 只是纯粹的将一个左值转化为了一个右值,STL实现基本都已 ...
分类:
编程语言 时间:
2020-05-11 18:40:06
阅读次数:
65
forward和完美转发 0、课前秀 + "std::forward" 也是头文件中的`` + 右值引用类型是独立于值的。 + 一个右值引用参数作为函数的形参,在函数内部再转发该参数的时候它已经变成一个左值了,并不是它原来的类型了 。 1、完美转发 + 完美转发 (Perfect Forwardin ...
分类:
编程语言 时间:
2020-05-06 13:42:23
阅读次数:
74
move语义 0、课前秀 + 这个概念不是很懂,但看cppreference里分为了两种:移动构造,移动赋值 + "move constructors" + "move assignment" + 移动语义是通过右值来匹配临时的, 普通的左值能否借助移动语义来优化性能 。 + 这是 "std::mo ...
分类:
编程语言 时间:
2020-05-05 18:01:09
阅读次数:
66
10右值引用 0、课前秀 + 右值引用(R value reference),标记为 ,是C++11增加的新的类型。 + 左值 :表达式结束后依然存在的持久对象 + 右值 :表达式结束时就不再存在的临时对象。 + 便捷的区分方法 :看能不能对表达式取地址。 所有的具名变量或对象都是左值 。 + 字面 ...
分类:
编程语言 时间:
2020-05-04 15:05:03
阅读次数:
59
不要将函数的返回值设为&&, std::string &&get(){ std::string s = "str";return std::move(s); } 代码中返回的字符串s在函数返回时就已经离开作用域调用析构函数,函数的得到的返回值其实是一个野指针。 ...
分类:
其他好文 时间:
2020-05-03 14:57:13
阅读次数:
60
指针 int *x;尽量理解为int 类型 1、指针声明之后,必须初始化,否则会随机指针 2、如果指针不知道指向谁,那么应该把这个指针变为空指针, 应用情况:在堆内存使用完之后要手动删除 空指针命名方法: int *p ==nullotr; 栈内存的东西不用delete,只针对new关键字hi用,栈 ...
分类:
编程语言 时间:
2020-04-27 13:35:22
阅读次数:
55
在C++11中, 不再只有逻辑与的含义,还可能是右值引用: 但也不尽然, 还可能是转发引用: “转发引用”(forwarding reference)旧称“通用引用”(universal reference),它的“通用”之处在于你可以拿一个左值绑定给转发引用,但不能给右值引用: 一个函数的参数要想 ...
分类:
其他好文 时间:
2020-04-19 22:20:08
阅读次数:
93