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
