在函数调用上重新分配默认参数

reassign default parameter on function call

我敢肯定这已经被问过数百次了,但奇怪的是我找不到任何东西......我想知道如何在调用时专门为默认函数参数重新分配一个值,省略其他参数站在它的左边。

这不会编译,因为我从 python 开始使用。但是怎么办呢?

void test(int i=0, int j=1){

    std::cout << i << " " << j << std::endl;

}

int main()
{

    test(j=2);

}

编辑

好吧,这不可能。那么让我改一下我的问题。为什么不可能?

现在,您的问题是为什么不允许,而不是是否允许。知道你来自Python,答案就比较容易解释了

在Python中,赋值是语句,而不是表达式。这意味着您不能在函数调用中为变量赋值:

>>> def foo(bar):
...  return bar
... 
>>> x=0
>>> foo(x=1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: foo() got an unexpected keyword argument 'x'

同时,在 C++ 中,赋值是 表达式,而不是 语句。因此,允许这样的事情:

void foo(int x) {
    // ...
}

void oof() {
    int x = 0;
    foo(x = 1);
}

在这种情况下,1 被分配给 xx 的新值作为参数传递给 foo()。所有这些混乱都来自一个名叫 Bjarne Stroustrup, who for no one's good decided to preserve (some) compatibility with the inventions of another man, namely Dennis MacAlistair Ritchie.

的人

现在,很明显可以理解为什么在 C++ 中允许关键字参数会涉及无法解析的堆栈溢出(但编译器的溢出,而不是您的程序的...)。程序如何区分如上所述的传统 assign-and-return 表达式和关键字参数?如果不将语言修改到甚至不再是 C 系列的一部分,就不可能做到这一点。

由于 Python 不希望与 C/C++/C--/~C/!C/*C/&C/ 兼容,因此(在某种程度上)解决了这个问题...,但它确实想要允许关键字参数,因此另一个人,即 Guido van Rossum,决定进行赋值语句,因为他们一直需要这样做。这允许上面在 C++ 中使用的语法在 Python 中用于关键字参数。

啊!而且,如果您有任何使 C++ 变得更复杂的想法,为什么不把您想到的第一件事告诉 ISO/ETC JTC1, SC22, WG21? I'm sure they'll standarize it, whatever it is, and you'll be spyied for the rest of your life by the some gnomes fabricated in Redmond