2010-04-08 99 views
1

我有我初始化這樣的結構:傳遞結構直接功能

typedef struct 
{ 
word w; 
long v; 
} 
MyStruct; 


MyStruct sx = {0,0}; 
Update(sx); 

現在看來這樣的垃圾先申報,然後將它傳遞。我知道在C#中,有一種方法可以完成一行。有沒有可能將它傳遞給我的更新函數更聰明(更清晰)的方式?

+0

爲什麼把所有東西放在一條線上很重要?編譯器將生成相同的代碼(刪除未使用的實例)。如果代碼更具可讀性,請始終使用多行。另外,使用多條線可能會緩解調試。 – 2010-04-08 18:50:07

回答

5

這取決於你的Update是如何聲明的。如果預計MyStruct型或const MyStruct&型的參考值,你可以做

Update(MyStruct()); 

這是可能的,因爲你想用零來初始化對象(這是什麼()初始化會在這種情況下做)。如果你需要不同的(非零)初始化值,你必須爲MyStruct提供一個構造函數,或者按照你的問題(至少在當前版本的C++語言中)這樣做。

6

在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

使用構造函數+1。 C++中的typedef實際上有些不同(從命名結構到名稱),但在大多數情況下,它不會被注意到,也不重要(這很可能不是它在問題代碼中的原因) – 2010-04-08 17:30:17