與其他一些語言不同,C++
要求在提供的參數之前提供所有默認參數。
從8.3.6默認參數 [dcl.fct.default]
如果在一個參數聲明中指定一個初始化子句此 初始化子句被用作默認參數。缺省參數 將用於呼叫尾隨參數丟失。
所以,如果一個函數有5個參數出其中3個默認:
- 默認值3必須是最後的3個參數
- 您可以致電與前2個參數的功能,前3個參數,第一個4個參數或全部5個參數。
我應該如何編碼具有第二個參數的可能性,但 不是第一?
在我的看法你的構造函數接口不是很好。在這種情況下,我寧願只有兩個構造函數,默認沒有任何參數,一個有兩個參數。如果你只想給出一個參數,你必須自己指定其他參數的默認值。
即
Point();
Point(double x, double y);
還是應該使用一些功能,以創建一個新點
Point CreateWithY(double y)
{
return Point(0.0, y);
}
,並用它作爲
Point p = CreateWithY(42.0); // Creates (0.0, 42.0)
不是答案的一部分,但:
Point myPoint();
聲明一個函數 myPoint它不接受任何參數並返回一個Point
類型的對象。你打算用什麼可能是:
Point myPoint;
'Point myPoint();'不做你聲稱的。 – chris