把c++打包为WebAssembly....
Install
Windows
# 下载工具
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
# 安装 需要科学上网
./emsdk install latest
./emsdk activate latest
# 更新环境变量
./emsdk_env.bat
把c++打包为WebAssembly....
# 下载工具
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
# 安装 需要科学上网
./emsdk install latest
./emsdk activate latest
# 更新环境变量
./emsdk_env.bat
使用 emplace_back
添加数列中的元数可以减少复制构造函数的调用。但是前提是传入的是该数组类型构造函数的参数。例如:
class Vertex
{
private:
int x, y, z;
public:
Vertex(int a, int b, int c) : x(a), y(b), z(c) {}
Vertex(const Vertex &other)
{
std::cout << "Copy!!!" << std::endl;
}
};
void Run()
{
std::vector<Vertex> vertices;
// 该方式复制6次
// vertices.push_back(Vertex(1, 2, 3));
// vertices.push_back(Vertex(4, 5, 6));
// vertices.push_back(Vertex(7, 8, 9));
// 以下方式无复制
vertices.reserve(3);
vertices.emplace_back(1, 2, 3);
vertices.emplace_back(4, 2, 3);
vertices.emplace_back(5, 2, 3);
}
有两种方式实现并发:
多个进程,使用信号,套接字,文件等作为信息传递媒介。
单个处理器,多线程
作用域中声明的变量都是存在栈中的。
#include <iostream>
class Entity
{
public:
int x;
Entity()
{
std::cout << "Created Entity" << std::endl;
}
~Entity()
{
std::cout << "Destroyed Entity" << std::endl;
}
};
class ScopePtr
{
public:
Entity *entityPtr;
ScopePtr(Entity *e) : entityPtr(e) {}
~ScopePtr() { delete entityPtr; }
};
void Run()
{
{
// 离开作用域当前值会被销毁
// Entity e;
// 离开作用域指针不会被销毁
// Entity *e = new Entity();
// 离开作用域指针会被销毁
ScopePtr e = new Entity();
}
std::cin.get();
}
脱离作用域,该指针就会被释放。不能复制这个指针。
std::weak_ptr
是 C++11 标准库中的一个智能指针类型,用于解决 std::shared_ptr
循环引用的问题。std::weak_ptr
不控制所指向对象的生命周期,它只是观察一个由 std::shared_ptr
管理的对象。这意味着 std::weak_ptr
不会增加所指向对象的引用计数。
使用 #define
,#include
,#if
等以#
开始的语句,来设置预编译。读取指定文件,把该文件读取到当前文件。
设置该选项可以查看预处理后的代码文件,打开该选项就不会生成obj
文件了。
文件在对应的输出文件夹中,以.i
为后缀的文件。
把编译好的文件,合成到一个可执行的文件中去。并定位每个函数在哪里。
发现一个宏定义类,被后面声明的类所替换。实例是:UniqueNetIdNull
\Engine\Plugins\EpicOnlineSubsystem\OnlineSubsystemRedpointEOS\Source\OnlineSubsystemRedpointEOS\Private\NullOSS\UniqueNetIdNull.h
\Engine\Engine\Plugins\Online\OnlineSubsystemNull\Source\Private\OnlineSubsystemNullTypes.h
Cmake中有很多预设变量,详情可以看这里。
标准库中的vector
与string
,在清除时,不仅需要调用clear
,还需要调用shrink_to_fit
https://en.cppreference.com/w/cpp/string/basic_string/shrink_to_fit
const vs constexpr: 对于变量来说最大的区别是初始化,const能延迟初始化到运行时,constexpr在编译时就需要对其初始化。 https://learn.microsoft.com/en-us/cpp/cpp/constexpr-cpp?view=msvc-170