现在,你的问题是为什么这是不允许的,而不是如果它是允许。知道你来自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
被分配到x
,并x
新的值传递作为参数foo()
。所有这些混乱都来自一个名叫Bjarne Stroustrup的人,他没有一个人决定保留(某些)与另一个人的发明兼容,即Dennis MacAlistair Ritchie。
现在,明白为什么在C++中允许关键字参数会涉及无法解析的堆栈溢出(但编译器,而不是您的程序......)。程序如何区分如上所述的传统assign-and-return
表达式和关键字参数?如果不修改语言,甚至不再是C系列的一部分,那么这样做是不可能的。
由于Python不想与C/C++/C/C/C/C/C/C/C/C/C/C/O兼容,但它确实需要以允许关键字参数,因此,另一个人,即Guido van Rossum,决定作出他们一直需要的作业陈述。这允许上面在C++中使用的语法在Python中可用于关键字参数。
啊!而且,如果你有任何想法让C++变得更加复杂,为什么不去谈论你想到的第一件事ISO/ETC JTC1, SC22, WG21?我相信他们会将它标准化,不管它是什么,并且你会在some gnomes fabricated in Redmond之后被追踪。
你根本不能。 –
哦。你能解释为什么吗? –
因为他们没有这样设计语言。 – TheUndeadFish