2012-11-17 138 views
12

我有一個struct結構初始化空載體 - C++

typedef struct user { 
    string username; 
    vector<unsigned char> userpassword; 
} user_t; 

我需要一個空vector初始化userpassword

struct user r={"",?}; 

我應該把而非?

+2

只要說'user r;'。而'typedef'是不必要的。 – chris

+0

@chris:這樣,userpassword將不包含有效的以null結尾的C字符串。 – SigTerm

+0

代碼是隻有例如...會有更多的值,我需要用適當的值初始化 – Tomasz

回答

16

std::stringstd::vector<T>都有構造函數將對象初始化爲空。你可以使用std::vector<unsigned char>()但我會刪除初始化程序。

7

如何

user r = {"",{}}; 

user r = {"",{'\0'}}; 

user r = {"",std::vector<unsigned char>()}; 

user r; 
+1

第一次沒有弄錯,第三次花蕾像一個魅力:)謝謝 – Tomasz

+0

@Tomasz,第一個和第二個是C++ 11。最後一個與第三個相同,但更短,更可讀。 – chris

8

像THI S:

#include <string> 
#include <vector> 

struct user 
{ 
    std::string username; 
    std::vector<unsigned char> userpassword; 
}; 

int main() 
{ 
    user r; // r.username is "" and r.userpassword is empty 
    // ... 
} 
1

默認的構造函數載體將創建一個空的載體。因此,你應該可以寫:

struct user r = { string(), vector<unsigned char>() }; 

請注意,我也使用了默認的字符串構造函數而不是「」。

你可能要考慮讓用戶一類,並添加一個默認的構造函數,這是否對你:

class User { 
    User() {} 
    string username; 
    vector<unsigned char> password; 
}; 

然後就寫:

User r; 

將導致正確初始化用戶。

+0

你甚至不需要默認的構造函數。 OP現在有這樣的方式,它仍然會做同樣的事情。 – chris