首頁 > 後端開發 > C++ > 主體

為什麼成員變數不能用作 C 成員函數中的預設參數?

DDD
發布: 2024-11-14 17:00:02
原創
955 人瀏覽過

Why Can't a Member Variable Be Used as a Default Argument in a C   Member Function?

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板