我有我初始化這樣的結構:傳遞結構直接功能
typedef struct
{
word w;
long v;
}
MyStruct;
MyStruct sx = {0,0};
Update(sx);
現在看來這樣的垃圾先申報,然後將它傳遞。我知道在C#中,有一種方法可以完成一行。有沒有可能將它傳遞給我的更新函數更聰明(更清晰)的方式?
我有我初始化這樣的結構:傳遞結構直接功能
typedef struct
{
word w;
long v;
}
MyStruct;
MyStruct sx = {0,0};
Update(sx);
現在看來這樣的垃圾先申報,然後將它傳遞。我知道在C#中,有一種方法可以完成一行。有沒有可能將它傳遞給我的更新函數更聰明(更清晰)的方式?
這取決於你的Update
是如何聲明的。如果預計MyStruct
型或const MyStruct&
型的參考值,你可以做
Update(MyStruct());
這是可能的,因爲你想用零來初始化對象(這是什麼()
初始化會在這種情況下做)。如果你需要不同的(非零)初始化值,你必須爲MyStruct
提供一個構造函數,或者按照你的問題(至少在當前版本的C++語言中)這樣做。
在C++中,結構與類相同,除了在結構中默認情況下,所有東西都是公共的。所以你可以給結構一個構造函數,例如
struct MyStruct
{
word w;
long v;
MyStruct(word w, long v) : w(w), v(v) {}
};
Update(MyStruct(0,0));
另外,C風格的struct typedef'ing在C++中是不必要的和不鼓勵的。
使用構造函數+1。 C++中的typedef實際上有些不同(從命名結構到名稱),但在大多數情況下,它不會被注意到,也不重要(這很可能不是它在問題代碼中的原因) – 2010-04-08 17:30:17
爲什麼把所有東西放在一條線上很重要?編譯器將生成相同的代碼(刪除未使用的實例)。如果代碼更具可讀性,請始終使用多行。另外,使用多條線可能會緩解調試。 – 2010-04-08 18:50:07