为什么C++不支持命名参数
Why C++ doesn't support named parameter
之前,我曾与 python 合作过。在 Python 中,我使用命名参数(关键字参数)进行函数调用。关于 named parameter 的维基百科页面表明 C++ 不支持它。为什么 C++ 不支持命名参数?它是否支持未来版本的 C++ 标准?
Why C++ doesn't support named parameter
因为标准中没有引入这样的特性。该功能在 C 中也没有(现在也不存在),而 C++ 最初正是基于此。
Does it support in future version of C++ standard?
也许吧。已经为它写了一个 proposal。这取决于该提案是否被投票纳入标准。
更新:提案已被拒绝。
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);
命名参数需要明显不同且向后不兼容的参数传递系统。
您可以使用 class 类型的单个参数来模拟命名参数:
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});
之前,我曾与 python 合作过。在 Python 中,我使用命名参数(关键字参数)进行函数调用。关于 named parameter 的维基百科页面表明 C++ 不支持它。为什么 C++ 不支持命名参数?它是否支持未来版本的 C++ 标准?
Why C++ doesn't support named parameter
因为标准中没有引入这样的特性。该功能在 C 中也没有(现在也不存在),而 C++ 最初正是基于此。
Does it support in future version of C++ standard?
也许吧。已经为它写了一个 proposal。这取决于该提案是否被投票纳入标准。
更新:提案已被拒绝。
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);
命名参数需要明显不同且向后不兼容的参数传递系统。
您可以使用 class 类型的单个参数来模拟命名参数:
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});