为什么C++不支持命名参数?

问题描述 投票:0回答:1

以前,我使用 Python。在 Python 中,我使用命名参数(关键字参数)进行函数调用。关于 named parameters 的维基百科页面告诉 C++ 不支持它。为什么 C++ 不支持命名参数?它会在未来版本的 C++ 标准中支持它吗?

c++ named-parameters
1个回答
66
投票

为什么 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});
© www.soinside.com 2019 - 2024. All rights reserved.