c++ 新的函数声明语法

右值引用(&&)

右值引用(&&)允许我们定义接受临时对象或移动语义的函数。

cpp 复制代码
void foo(int&& x); // 右值引用参数

默认参数

允许在函数声明中指定参数的默认值。

cpp 复制代码
void bar(int x, double y = 3.14); // 带有默认参数的函数声明

noexcept关键字

指示函数是否可能引发异常。

cpp 复制代码
void baz() noexcept; // 不会引发异常的函数声明

constexpr函数

允许在函数声明中指定constexpr以表明函数可以在编译时求值。

cpp 复制代码
constexpr int add(int x, int y); // constexpr函数声明

模板函数

引入了更灵活的模板函数声明,支持更多的模板参数和模板参数的默认值。

cpp 复制代码
template<typename T = int>
void qux(T x); // 带有模板参数的函数声明

尾置返回类型 (Trailing Return Type)

C++11 引入了尾置返回类型的概念,这允许我们在函数参数列表之后声明返回类型。这主要用于那些返回类型依赖于模板参数的函数。

cpp 复制代码
template<typename T, typename U>  
auto add(T t, U u) -> decltype(t + u);

auto 类型推导

C++11 中的 auto 关键字允许编译器自动推导变量的类型。在函数声明中,auto 可以与尾置返回类型一起使用,以自动推导函数的返回类型。

cpp 复制代码
auto max(int a, int b) -> int {  
    return (a > b) ? a : b;  
}

函数模板参数推导

从 C++17 开始,我们可以省略函数模板的参数类型,让编译器自动推导。这被称为函数模板参数推导或 CTAD (Class Template Argument Deduction)。

cpp 复制代码
template<typename T>  
T add(T t1, T t2) {  
    return t1 + t2;  
}  
  
// 使用时,不需要显式指定模板参数类型  
auto result = add(3, 4);  // result 的类型为 int

结构化绑定 (Structured Binding)

虽然这不是直接关于函数声明的,但结构化绑定允许我们以更简洁的方式从函数返回多个值。这在 C++17 中被引入。

cpp 复制代码
std::pair<int, int> getTwoNumbers() {  
    return {5, 10};  
}  
  
auto [a, b] = getTwoNumbers();  // a = 5, b = 10

Lambda 表达式

虽然 Lambda 表达式不是传统意义上的函数声明,但它们提供了一种在代码中定义匿名函数的方式。Lambda 表达式在 C++11 中被引入,并在此后的标准中得到了改进。

默认参数和函数重载

虽然这些特性在较早的 C++ 标准中就已经存在,但它们仍然是函数声明的重要组成部分。默认参数允许我们为函数参数提供默认值,而函数重载允许我们为同一函数名定义多个版本,每个版本接受不同类型的参数。这些特性增加了代码的灵活性和可读性。

相关推荐
小陶的学习笔记12 小时前
python~基础
开发语言·python·学习
用户2547010088812 小时前
类和对象笔记
c++
lsx20240612 小时前
JavaScript 条件语句
开发语言
玄同76512 小时前
Python 自动发送邮件实战:用 QQ/163 邮箱发送大模型生成的内容
开发语言·人工智能·python·深度学习·机器学习·邮件·邮箱
索荣荣12 小时前
Maven配置文件(pom.xml)终极指南
java·开发语言
钟智强12 小时前
React2Shell:CVE-2025-66478 Next.js 远程执行漏洞深度分析与代码剖析
开发语言·javascript·ecmascript
数研小生12 小时前
Python自然语言处理:NLTK与Gensim库
开发语言·python·自然语言处理
第七序章12 小时前
【Linux学习笔记】初识Linux —— 理解gcc编译器
linux·运维·服务器·开发语言·人工智能·笔记·学习
John_ToDebug12 小时前
Chromium回调机制的隐秘角落:当const &参数遇见base::BindOnce
c++·chrome·性能优化
消失的旧时光-194312 小时前
C++ 拷贝构造、拷贝赋值、移动构造、移动赋值 —— 四大对象语义完全梳理
开发语言·c++