我搜索了四周,似乎無法找到我的問題的答案。我在做一個項目,我必須重新定義一些運營商(+
,-
,*
等)爲載體和多項式之間的操作。據我所知,這些運營商都應該返回對象的副本,以便不直接修改他們,如果我們簡單地調用運營商(IE的vect1+vect2;
代替vect1 += vect2;
),而不是把結果放置在任何地方。在方法中返回靜態變量是一個壞主意嗎?
現在,我已經看到了各地,使用靜態變量是一種不好的做法,但我怎樣才能避免這樣做,當一個方法需要返回結果的副本,而不是修改對象的?
問題here和here並沒有真正的幫助,因爲它們沒有解決我的特殊問題。
這裏是我的意思的例子:
template <class elem>
Vect_variable<elem>& Vect_variable<elem>::operator+(const Vect_variable& operand)
{
if (taille >= operand.taille)
{
static Vect_variable<elem> temp_v;
temp_v = *this;
for (std::size_t i = 0; i<operand.taille; i++)
{
temp_v[i] += operand.vecteur[i];
}
return temp_v;
}
else
{
static Vect_variable<elem> temp_v;
temp_v = operand;
for(std::size_t i = 0; i<taille; i++)
{
temp_v[i] += vecteur[i];
}
return temp_v;
}
}
在這種情況下,你可以看到,我所使用的臨時變量創建靜態Vect_variable
。有沒有辦法做到這一點,否則?
簡單的回答:停止返回參考。 _「據我所知,這些操作員應該返回對象的副本」_確切地說,爲什麼你要返回一個參考?這不是一個對象的副本。如果你停止不正確地返回一個引用,那麼你不需要使用'static'。 –
@JonathanWakely是的,不幸的是,我正在從我繼承的類中定義一個純虛方法,這就是爲什麼我必須返回引用。 – DefinitelyNotMe
然後,基類破碎,愚蠢。你需要檢查預期的行爲,也許它應該修改'* this'。在其他情況下返回參考是沒有意義的,它應該提及什麼?它不能是一個靜態變量,因爲它更加破碎。 –