C++17 类模板参数推导
C++17引入了类模板参数推导 (Class Template Argument Deduction, CTAD),使得编译器能够在实例化模板类时自动推导出模板参数类型。结合构造函数模板推导,这意味着当你在构造一个类模板的对象时,可以省略模板参数,编译器会根据构造函数的参数自动推导出模板参数。
基本使用假设你有一个简单的模板类 Pair,它用于存储两个值:
1234567template <typename T1, typename T2>struct Pair { T1 first; T2 second; Pair(T1 a, T2 b) : first(a), second(b) {}};
在 C++17 之前,你必须显式地指定模板参数:
1Pair<int, double> p(1, 3.14);
但在 C++17 中,你可以省略模板参数:
1Pair p(1, 3.14); // 编译器会自动推导出 Pair<int, double>
编译器通过构造函数的 ...
C++11 lambda表达式1. 简介与使用lambda的历时悠久,不过具体到C++11中,lambda函数却显得与之前C++规范下的代码在风格上有较大的区别。举例如下:
12345678910#include <iostream>int main(){auto addNums= [](int nNum1, int nNum2)->int {return nNum1 + nNum2; }; std::cout << "结果:addNums= " << addNums(11, 2); return 0;}
在上述代码中,定义了一个lambda函数,该函数接收两个参数:nNum1和nNum2,并返回两个参数的和;
在此,lambda相比于普通函数来说,少了函数名,取而代之的是一对([]);
此外,lambda函数还采用追踪的返回类型的方式声明其返回值。其余反面看起来跟普通函数定义一样。
2. lambda函数语法定义[capture] (parameters) mutable -> ...
everyday
未读WSL 中文字符编码问题在使用 Windows Subsystem for Linux (WSL) 进行开发时,一些用户可能会遇到在 WSL终端中显示中文时出现乱码的问题。这种问题可以影响到日常开发和命令行工具的使用。本文将介绍几种常见的解决方法来解决 WSL中文乱码问题。
方法一:设置字符编码在终端中执行以下命令,将终端的字符编码设置为 UTF-8:
12export LANG=en_US.UTF-8export LC_ALL=en_US.UTF-8
然后,重新启动终端并尝试输入中文字符,应该能够正确显示中文字符了。
方法二:安装中文字体12sudo apt-get updatesudo apt-get install fonts-wqy-zenhei
安装完成后,重新启动终端或注销并重新登录,然后尝试输入中文字符,应该能够正常显示了。
题外关于WSL显示GUI APP
选择“开始”,键入 PowerShell,右键单击“Windows PowerShell”,然后选择“以管理员身份运行”。
输入 WSL 更新命令1wsl --update
需要重启 WSL 才能使更新生效。可以 ...
1. auto
在 C++11 中,引入了许多新的特性,例如 auto 关键字用于自动推导变量的类型,同时结合 decltype可以明确表示函数的返回值。这些特性使得代码更加简洁和现代化,提升了编程效率和可维护性。利用这些新特性,我们能够编写出更加优雅和高效的代码。
1.1 基本推导规则当使用 auto 声明一个变量时,编译器根据初始化表达式的类型来推导变量的类型。推导的类型与初始化表达式的类型相同。使用语法如下:
1auto variable = expression; # auto 变量名 = 变量值
简单使用例子如下:
123auto x = 10; // x 的类型是 intauto y = 3.14; // y 的类型是 doubleauto z = "hello"; // z 的类型是 const char*
1.2 引用和指针如果初始化表达式是一个引用或指针,auto 推导的类型也会是对应的引用或指针类型。
123int a = 5;auto& ref = a; // ref 的类型是 int&au ...