c++14 新增内容

目录

一,二进制字面量

二,数字分隔符

三,放宽 constexpr

四,泛型 lambda

五,变量模板


一,二进制字面量

#include <iostream> int main() { int num = 0b10101010; int result = num & 0b00001111; std::cout << "Result: " << result << std::endl; return 0; }

二,数字分隔符

常规用法:

#include <iostream> int main() { int billion = 1'000'000'000; std::cout << "One billion is: " << billion << std::endl; return 0; }

或者:

#include <iostream> int main() { int billion = 10'0000'0000; std::cout << "One billion is: " << billion << std::endl; return 0; }

实际上,分隔符是比较自由的,可以不等距的加,只不过一般情况下这样做没有任何意义。

三,放宽 constexpr

constexpr的函数定义中,允许更多的语法了,比如if else

constexpr int func(int nIndex) { if (nIndex == 0) return 0; else if (nIndex < 10) return nIndex; else return nIndex * 10; } #include <iostream> int main() { constexpr int x = func(100); std::cout << x << std::endl; // Output: 1000 return 0; }

输出1000

四,泛型 lambda

把lambda表达式的n个入参都写成auto类型,就成了一个有n个不同的模板类型参数的泛型函数。

#include <iostream> auto add = [](auto a, auto b) { return a + b; }; int main() { auto add = [](auto a, auto b) { return a + b; }; std::cout << "3 + 5 = " << add(3, 5) << std::endl; // 处理整数 std::cout << "3.2 + 5.7 = " << add(3.2, 5.7) << std::endl; // 处理浮点数 return 0; }

输出:

3 + 5 = 8
3.2 + 5.7 = 8.9

五,变量模板

#include <iostream> template <typename T> constexpr T pi = T(3.1415926535897932385); template <typename T> T area(T r) { return pi<T> *r * r; } int main() { std::cout << pi<int> << std::endl; // 输出3 std::cout << area(2.0) << std::endl; // 输出12.5664 }

输出:

3
12.5664