C 支持名称参数

Does C++ support named parameters?

本文关键字:参数 支持      更新时间:2023-10-16

以前,我与python合作。在Python中,我使用命名参数(关键字参数)进行函数调用。关于命名参数的Wikipedia页面告诉C 不支持它。为什么C 支持名称参数?它会在C 标准的未来版本中支持它吗?

C 支持命名参数?

否,因为此功能尚未引入标准。C 最初基于C 的功能也不存在(也不存在)。

它将在C 标准的未来版本中支持它?

为此写了一项建议。但是该提议被拒绝。

C 中的一个基本问题是,函数声明中的参数名称并不重要,并且以下程序定义明确:

void foo(int x, int y);
void foo(int y, int x);   // re-declaration of the same function
void foo(int, int);       // parameter names are optional
void foo(int a, int b) {} // definition of the same function

如果将命名参数引入了该语言,则在这里传递哪些参数?

foo(x=42, b=42);

命名参数需要显着不同,并且向后不兼容的参数传递系统。


您可以使用类类型的单个参数模拟命名参数:

struct args {
    int   a = 42;
    float b = 3.14;
};
void foo(args);
// usage
args a{};
a.b = 10.1;
foo(a);
// or in C++20
foo({.b = 10.1});