C++14特性

C++14特性

引言

本文旨在记录C++14特性。

特性

lambda表达式参数类型可以使用auto类型

使用示例:

bash 复制代码
auto lambda = [](auto x, auto y) { return x + y; };
int result1 = lambda(1, 2); // 返回 3
double result2 = lambda(1.5, 2.5); // 返回 4.0

lambda表达式的捕获列表中允许出现表达式

使用示例:

bash 复制代码
int x = 10;
auto lambda = [value = x + 1]() { return value; };
std::cout << lambda(); // 输出 11

二进制字面量和数字分割符

使用示例:

bash 复制代码
int binary = 0b1010;      // 十进制10,书写二进制数值(如 0b1010)比十六进制(0xA)更直观
long million = 1'000'000; // 提高可读性,更清晰,减少人为错误

C++11 及更早版本的标准中,不支持 0b 前缀的二进制字面量。某些编译器(如 GCC、Clang)通过 扩展支持 允许这种写法,但这属于非标准行为,依赖编译器实现。

deperacated标记过时

使用示例:

cpp 复制代码
[[deprecated("Use new_func() instead")]]
void old_func() {}

可以标记过时的变量,函数和类。在编译的时候输出警告。

个人感觉,仅提示作用。

可进一步查看下面的文章,出自------画个逗号给明天''。

参考:deperacated使用示例和讲解

constexpr

在 C++11中constexpr用于修饰函数和常量,必须用常量表达式初始化,只能包含一个return语句,被constexpr修饰的函数内部不能有局部变量定义,不能有分支语句,循环语句等,参数和返回值必须是字面量类型。

而C++14进一步放宽限制,允许在constexpr修饰的函数中有局部变量,条件变量和分支语句。

使用示例:

cpp 复制代码
constexpr int factorial(int n) {
    int result = 1;
    for (int i = 1; i <= n; ++i) {
        result *= i;
    }
    return result;
}
static_assert(factorial(5) == 120, "");

变量模板

允许定义模板化的常量变量。

使用示例:

cpp 复制代码
template<typename T>
constexpr T pi = T(3.1415926535897932385);

double circle_area(double r) {
    return pi<double> * r * r;
}

delctype表达式类型推导(包含引用型)

使用示例:

cpp 复制代码
int x = 42;
int& r = x;
decltype(auto) y = x;   // int
decltype(auto) z = r;   // int&

make_unique

之前C++11只有make_shared.

使用示例:

cpp 复制代码
auto p = std::make_unique<int>(42);
auto arr = std::make_unique<int[]>(10);   // 数组版本

std::exchange

新值替换旧值,返回原值。

cpp 复制代码
int a = 10;
int old = std::exchange(a, 20);  // old = 10, a = 20

std::integer_sequence 与 std::index_sequence

cpp 复制代码
template<typename Tuple, size_t... I>
void print_impl(const Tuple& t, std::index_sequence<I...>) {
    ((std::cout << std::get<I>(t) << " "), ...);
}

template<typename... Args>
void print(const std::tuple<Args...>& t) {
    print_impl(t, std::index_sequence_for<Args...>{});
}

以上是C++14相对于C++11新增的部分特性。

相关推荐
一条大祥脚15 分钟前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
·present·23 分钟前
CSAPP(lecture 13_02 Linking)
c语言·c++
FRing031 小时前
vue2干货总结8(路由模块封装、router-link、声明式导航、路由重定向、编程式导航)
开发语言·前端·vue.js·vue2
旖旎夜光1 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
starzy19901 小时前
深入理解Scala嵌套函数:作用域封装之道
开发语言·scala
Sakura_j_h_2 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
青少儿编程课堂3 小时前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关
c++·python·算法·bfs·信息学竞赛
白杨尚青3 小时前
C++进阶篇(五):红黑树——四条规则、三种插入情况与旋转变色
开发语言·数据结构·c++·stl·红黑树·平衡二叉树
.道阻且长.3 小时前
Linux基本开发工具:gdb和cgdb的使用
linux·运维·服务器·开发语言
starzy19904 小时前
深入理解Scala匿名函数:函数式编程基石
开发语言·scala