現在,你的問題是爲什麼這是不允許的,而不是如果它是允許。知道你來自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