在 C 中使用成員變數作為預設參數
在 C 中,可以使用成員為成員函數指定預設參數多變的。但是,嘗試使用成員函數作為預設參數可能會導致編譯器錯誤,如下例所示。
class Object { protected: Point initPos; Point currPos; void MoveTo(double speed, Point position = initPos); }; void Object::MoveTo(double speed, Point position) { currPos = postion; }
此程式碼將遇到以下編譯錯誤:
error: invalid use of non-static data member 'Object::initPos'
錯誤原因
成員函數中的預設參數表達式僅限於使用類別內或全域範圍內的元素。這裡,在呼叫函數時,編譯器無法確定 initPos 成員變數的值,從而導致錯誤。
解決方案
要解決此問題,請使用function使用以下方法重載:
// Single-argument overload that defaults to initPos void Object::MoveTo(double speed) { MoveTo(speed, initPos); } // Two-argument overload that takes the explicit position void Object::MoveTo(double speed, Point position) { // Implementation here }
優點優點
此技術允許在成員函數中進行可選參數處理,同時維護單一方法中的實作。它遵循 DRY(不要重複自己)原則,避免程式碼重複,同時提供指定預設值的便利方法。以上是為什麼成員變數不能用作 C 成員函數中的預設參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!