2012-11-17 144 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