假設有必要實施getter/setters(我也試圖儘可能避免它們,因爲它們經常表示設計不好)。以下兩種哪種變體更好,每種變體的含義是什麼?什麼是getter方法的推薦簽名?
可能性(1):
class Foo;
class Bar
{
public:
const Foo& getFoo() const {return foo_;}
private:
Foo foo_;
};
或(2):
class Foo;
class Bar
{
public:
void getFoo(Foo& foo) const {foo = foo_}
private:
Foo foo_;
};
就個人而言,我總是使用第一種變體,因爲我覺得這樣更直觀。在第二個變體中,您必須在調用getFoo之前構造Foo對象,該對象將保存getFoo的結果,然後將getFoo傳遞給此對象的引用。這個變體對我來說感覺是違反直覺的,但是有些人更喜歡secodn變體。出於什麼原因,第二個變體可能會優於第一個變體?
我打算說一聲「沒有」。你有沒有考慮過'Foo const&getFoo()const'? –
如果您想要第二個版本w.r.t的行爲,請添加到'Foo&getFoo()'中。你的引用的可變性(注意,技術上你的2不是'const'-conformant,你將不得不應用這個技巧)。 –
我是唯一一個迷惑於吸氣劑和二道手指示不良設計的人嗎? – Mitch