Compare commits
9 Commits
fdbb28d6c0
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 1e4d4395fc | |||
| 926dde47d8 | |||
| ea79fc2496 | |||
| 859dac179c | |||
| f39caa9271 | |||
| b0c33cd57d | |||
| 03b44c1345 | |||
| 267ab3e11a | |||
| 0b56988fcd |
3
Languages/cpp/Linux库.txt
Normal file
3
Languages/cpp/Linux库.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
常用库:
|
||||
libsqlite3-dev nlohmann-json3-dev libgtest-dev ninja-build libboost-all-dev libfmt-dev
|
||||
libfmt-dev libtinyxml2-dev
|
||||
75
Languages/cpp/Vcpkg.txt
Normal file
75
Languages/cpp/Vcpkg.txt
Normal file
@@ -0,0 +1,75 @@
|
||||
常用库安装
|
||||
curl[ssl,http2,http3,openssl,websockets,zstd,ssh,psl,idn2,brotli]
|
||||
|
||||
vcpkg.exe install boost:x64-mingw-dynamic --allow-unsupported
|
||||
Please use the following command when you need to remove all boost ports/components:
|
||||
vcpkg remove boost-uninstall:x64-mingw-dynamic --recurse"
|
||||
|
||||
x.安装
|
||||
git clone https://github.com/microsoft/vcpkg
|
||||
cd vcpkg
|
||||
./bootstrap-vcpkg.bat (其他平台用对应的脚本)
|
||||
|
||||
x.如何更新
|
||||
git pull
|
||||
重新./bootstrap-vcpkg.bat
|
||||
|
||||
x.查询有哪些库 https://vcpkg.io/en/index.html
|
||||
|
||||
在 triplets/下面设置
|
||||
.\vcpkg.exe install openssl --triplet x86-windows
|
||||
--triplet 后面的内容就是triplets/下的列表
|
||||
set(VCPKG_PLATFORM_TOOLSET v141)
|
||||
有效设置
|
||||
Visual Studio 2022 平台工具集为 v143。
|
||||
Visual Studio 2019 平台工具集为 v142。
|
||||
Visual Studio 2017 平台工具集为 v141。
|
||||
Visual Studio 2015 平台工具集为 v140。
|
||||
|
||||
x.安装库
|
||||
vcpkg install spdlog (默认x86)
|
||||
vcpkg install spdlog:x64-windows
|
||||
vcpkg install spdlog:x64-windows-static
|
||||
|
||||
x.更新库
|
||||
vcpkg update 或者 vcpkg upgrade 列出
|
||||
upgrade 会列出,但是不升级,使用 -no-dry-run
|
||||
|
||||
vcpkg upgrade spdlog:x64-windows --no-dry-run
|
||||
可以指定多个库参数
|
||||
|
||||
x.查询库
|
||||
vcpkg search spdlog
|
||||
|
||||
x.列出已安装的库
|
||||
vcpkg list
|
||||
|
||||
x.导出一个库
|
||||
vcpkg export spdlog:x64-windows --zip or --7zip
|
||||
–raw 以不打包的目录格式导出
|
||||
–nuget 以nuget包形式导出
|
||||
–ifw 我也不知道这是啥格式
|
||||
–zip 以zip压缩包形式导出
|
||||
–7zip 以7z压缩包形式导出
|
||||
|
||||
x.到处所有已安装的库。
|
||||
--x-all-installed
|
||||
|
||||
导出位置在 vcpkg 目录下
|
||||
|
||||
x.集成到 visual studio (全局)
|
||||
vcpkg integrate install
|
||||
vcpkg integrate remove
|
||||
|
||||
x.集成到 visual studio (某个项目)
|
||||
vcpkg integrate project 生成 nuget 配置文件,同时会给一个安装命令。
|
||||
在 vs 中打开[工具]->nuget->控制台,输入安装命令。
|
||||
|
||||
x.集成到 CMake
|
||||
设置 CMAKE_TOOLCHAIN_FILE {vcpkg_root}/scripts/buildsystems/vcpkg.cmake
|
||||
|
||||
x.例如 VSCode 编辑器
|
||||
settings.json中:
|
||||
"cmake.configureSettings": {
|
||||
"CMAKE_TOOLCHAIN_FILE": "${env:VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
|
||||
},
|
||||
29
Languages/cpp/关于编码.txt
Normal file
29
Languages/cpp/关于编码.txt
Normal file
@@ -0,0 +1,29 @@
|
||||
下面的讨论都是讨论Windows下的,因为其他平台基本都是默认U8,且支持OK。
|
||||
|
||||
测试情况如下:
|
||||
// 编译选项:/std:c++17 /utf-8
|
||||
int main() {
|
||||
#if _WIN32 // 热知识:64 位 Windows 也会定义 _WIN32 宏,所以 _WIN32 可以用于检测是否是 Windows 系统
|
||||
setlocale(LC_ALL, ".utf-8"); // 设置标准库调用系统 API 所用的编码,用于 fopen,ifstream 等函数
|
||||
SetConsoleOutputCP(CP_UTF8); // 设置控制台输出编码,或者写 system("chcp 65001") 也行,这里 CP_UTF8 = 65001
|
||||
SetConsoleCP(CP_UTF8); // 设置控制台输入编码,用于 std::cin
|
||||
#elif __APPLE__
|
||||
// 通常来说 MacOS 的默认编码就是 UTF-8,这里设置全局 locale 是为了让 iswspace 接受全角空格、iswpunct 接受全角逗号 L',' 等
|
||||
setlocale(LC_ALL, "UTF-8"); // MacOS 设置 UTF-8 编码,让 iswspace 接受全角空格等
|
||||
#elif __unix__
|
||||
// 反正 Unix 系统默认都是 UTF-8,不设置也行,这里设置全局 locale 是为了让 iswspace 接受全角空格、iswpunct 接受全角逗号 L',' 等
|
||||
//setlocale(LC_ALL, "zh_CN.utf-8"); // 设置使用中文本地化,可使 strerror 输出中文(但用户必须 locale-gen 过中文!)
|
||||
setlocale(LC_ALL, "C.utf-8"); // 设置使用语言中性 locale(推荐),只影响 iswspace、iswpunct 等函数,不会使 strerror 等输出中文
|
||||
#endif
|
||||
// 这里开始写你的主程序吧!
|
||||
// ...
|
||||
std::cout << "你好,世界\n"; // 没问题!
|
||||
std::ifstream fin("你好.txt"); // 没问题!
|
||||
std::wcout << L"你好,世界\n"; // 你都统一 UTF-8 了,这破 UTF-16 和 UTF-32 之间来回跳的破 wchar_t 就别用了呗!
|
||||
return 0;
|
||||
}
|
||||
|
||||
这种方式其实基本就已经实现了全UTF-8的情况,但是有一个前提条件就是控制台支持UTF-8的读入,输出不清楚,
|
||||
可能也有不少控制台支持输出U8,但支持UTF-8读入的好像不多,目前测试比较好的就是Windows Terminal。
|
||||
|
||||
不支持UTF-8输入的控制台,就只能用ReadConsoleW去自行封装解码,鉴于不够通用,没有深入研究。
|
||||
12
Languages/cpp/关于语法疑问.txt
Normal file
12
Languages/cpp/关于语法疑问.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
【1】函数直接返回一个栈上面的对象,是会调用移动构造还是复制构造??
|
||||
实际测试=>
|
||||
(1)在MSVC中,不开优化时调用移动构造,开启优化时,编译器直接在返回值位置构造对象,避免拷贝/移动。
|
||||
称为NRVO优化 [NRVO 是 Named Return Value Optimization 的缩写,意思是 "命名返回值优化"。]。因为在函数中,返回的是一个有名字的局部变量。
|
||||
|
||||
【2】noexcept干嘛的?
|
||||
用于优化。
|
||||
很多标准库容器(如 std::vector)操作在重新分配内存时,会根据移动操作的 noexcept决定策略。
|
||||
即检查移动操作是否是 noexcept来选择"移动还是拷贝"。
|
||||
比如std::vector<ClassA>,在扩容时,默认调用ClassA的拷贝构造函数,因为假如默认移动构造,移动到某个位置突然异常了,这时候没法“复原”数据,
|
||||
因为移动,原容器不能用了,又因为没有移动完,移动后的也不能用,只能终止。但用户意愿可能需要可以恢复,所以默认不调用移动构造。
|
||||
如果用户明确表明了noexcept,那么表示可以接受如果移动失败终止的结果。
|
||||
4
Languages/cpp/语法细节点.txt
Normal file
4
Languages/cpp/语法细节点.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
【1】SSO(Small String Optimization)小字符串优化。
|
||||
std::string在很多实现中使用了 SSO:
|
||||
短字符串(通常<=15字符)直接存储在对象内部,不堆分配
|
||||
长字符串才使用堆内存,使用std::move后,可能地址不同。
|
||||
@@ -1,2 +1,7 @@
|
||||
【1】删除远程分支:
|
||||
git push origin --delete dev
|
||||
git push origin --delete dev
|
||||
|
||||
【2】删除submodule示例
|
||||
git submodule deinit googletest
|
||||
git rm googletest
|
||||
git commit -m "Remove googletest"
|
||||
|
||||
@@ -30,6 +30,8 @@ xrepo install -p windows --vs=2022 --toolchain=msvc zoost
|
||||
这种来指定不同的库版本。当然工程中也需要指定如xmake f --vs=2022 --toolchain=msvc来对应。
|
||||
后续使用发现,指定了--vs=2022 --toolchain=msvc应该会自适应编译器版本,但是--toolchain=msvc
|
||||
必须要设定,不能光设定--vs=2022。
|
||||
--比如当在vs2022中安装了v141工具集时,xmake使用
|
||||
xmake -f --vs_toolset=14.16,而不是v141这种写法。
|
||||
|
||||
【2】xmake的基本配置
|
||||
|
||||
|
||||
15
System/Windows/取消睡眠.txt
Normal file
15
System/Windows/取消睡眠.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
https://help.realvnc.com/hc/en-us/articles/28401208368413-Resolving-the-Sleep-is-enabled-warning-in-RealVNC-Server
|
||||
|
||||
powercfg /query SCHEME_CURRENT SUB_SLEEP
|
||||
这个命令会查询并显示你当前活跃电源方案的所有与睡眠相关的电源设置,而不仅仅是某个特定设置。
|
||||
要更改设置以禁用任何睡眠命令,请在PowerShell窗口中运行以下作。
|
||||
|
||||
# Disable all timeouts for maximum "always on" configuration
|
||||
powercfg /change standby-timeout-ac 0
|
||||
powercfg /change standby-timeout-dc 0
|
||||
powercfg /change monitor-timeout-ac 0
|
||||
powercfg /change monitor-timeout-dc 0
|
||||
powercfg /change disk-timeout-ac 0
|
||||
powercfg /change disk-timeout-dc 0
|
||||
powercfg /change hibernate-timeout-ac 0
|
||||
powercfg /change hibernate-timeout-dc 0
|
||||
Reference in New Issue
Block a user