现代C++是否支持标准的命名参数语法?
现代C++标准中的命名参数支持
截至C23正式标准,C没有提供像C#、Python那样原生的命名参数语法——也就是无法直接通过函数名(参数名: 值)的形式跳过参数位置、指定特定参数进行调用。
下面是和该需求相关的现有C++特性,注意不要和命名参数混淆:
- 默认参数:C++早就支持为函数参数设置默认值,例如:
但调用时只能按参数顺序省略后续的默认参数,无法跳过前面的参数直接指定后面的(比如不能只传void print_nums(int x = 0, int y = 0) { // 函数逻辑 }y的值而跳过x)。 - C++20指定初始化器:该特性允许对聚合类型(结构体、数组等)按成员名初始化,例如:
但它仅适用于聚合类型的初始化,不能用于函数调用的参数传递。struct Point { int x; int y; }; Point p = {.y = 3, .x = 5};
目前有针对命名参数的提案(如P1177系列)在C标准委员会讨论中,但尚未被纳入正式标准,未来版本的C有可能会加入该特性,但当前(C++23及之前)没有原生的标准实现方案。
内容的提问来源于stack exchange,提问作者ProMike
相关产品推荐
相关产品推荐

