我想在C++中使用以下id
函數。我會假設我可以簡單地做;簡單的方法返回在c + +中的數組
typedef int v3[3];
v3 & id(v3 & in)
{
in[0] = in[1] = in[2] = 1;
return in;
}
int main()
{
v3 & v = id(v);
return 0;
}
但是,這導致段錯誤與g++
(這是不清楚給我)。因爲我可以做標量型如下:
int & zero(int & in)
{
in = 0;
return in;
}
int main()
{
int i = zero(i);
return 0;
}
如何使用id
用一個單一的代碼行?我想避免一個醜陋的解決方案,如:
int main()
{
v3 v;
v3 & w = id(v);
}
當然,我不希望使用std::vector
或std::array
(C++ 11)。所以我真的很感興趣,爲什麼我的天真的解決方案實際上是undefined behavior
。
編輯:std::vector
將需要動態分配,在我的情況下應該避免(我需要操縱成千上萬的vr3
)。我不能使用std::array
,因爲我需要堅持c++03
。顯然,人們無法猜測我的要求。
您爲名爲'v'的引用分配存儲空間。它指向什麼,當你寫'v [0] = v [1] = v [2] = 1時,你寫的是什麼?'!? – StoryTeller
如果您對「這是未定義的行爲?」感興趣嗎?和「編譯器爲什麼編譯它?」方面,請看這裏:http:// stackoverflow。com/questions/25717740/why-is-gcc-tricked-into-allowed-undefined-behavior-by-put-in-a-lo –
我真的很感興趣,有什麼可能是不使用'std :: vector <>'或'std :: array <>'。它對你來說一定很明顯,你告訴我們,「當然」你不想使用它們。請在這個問題上稍微詳細一點。 – cdonat