C++ 创建对象时是否初始化类中的成员值?

C++ 创建对象时是否初始化类中的成员值?,c++,initialization,member,c++03,C++,Initialization,Member,C++03,我正在编写一个哈希类: struct hashmap { void insert(const char* key, const char* value); char* search(const char* key); private: unsigned int hash(const char* s); hashnode* table_[SIZE]; // <-- }; struct hashmap{ 无效插入(常量字符*键,常量字符*值); 字符*搜索(常量字符*键);

我正在编写一个哈希类:

struct hashmap {
  void insert(const char* key, const char* value);
  char* search(const char* key);
 private:
  unsigned int hash(const char* s);
  hashnode* table_[SIZE]; // <--
};
struct hashmap{
无效插入(常量字符*键,常量字符*值);
字符*搜索(常量字符*键);
私人:
无符号整数散列(常量字符*s);

hashnode*table_[SIZE];//必须将所有指针设置为NULL。 您不必使用循环,可以调用构造函数:

memset(table_, 0, SIZE*sizeof(hashnode*));

必须将所有指针设置为NULL。 您不必使用循环,可以调用构造函数:

memset(table_, 0, SIZE*sizeof(hashnode*));

在当前设计中,
数组将被取消初始化,就像您说的
int n;
一样。但是,您可以在构造函数中对数组进行值初始化(从而对每个成员进行零初始化):

struct hash_map
{
    hash_map()
    : table_()
    {
    }

    // ...
};

在当前设计中,
数组将被取消初始化,就像您说的
int n;
一样。但是,您可以在构造函数中对数组进行值初始化(从而对每个成员进行零初始化):

struct hash_map
{
    hash_map()
    : table_()
    {
    }

    // ...
};


<代码> Hash No.Table[[大小] {}; >我希望你只是作为一个练习来做,因为C++已经有一个哈希图了。@ JoajimiBrg很遗憾没有C++ 11和我的项目中的升力。我希望你只是作为一个练习来做这件事,因为C++已经有一个哈希图了。@ JoajimiBrg很遗憾没有C++ 11和我的项目中的升力。@德青,是的,答案没有问题,但是这是最干净的一个。[-fppermissive]
。顺便说一句,我的项目中没有C++11:(我确信这种零初始化在C++03中也能起作用。你是说它不能起作用吗?我当然在C++03代码中使用它,gcc接受它并带有
-Wall-Wextra-pedantic errors-std=C++98
@juanchopanza:完全正确,我不知道我在想什么。我想我被你不能用arbi初始化数组的事实吓坏了。)trary内容,但当然值初始化是有效的。虽然知道这是否在C++98和C++03之间发生了变化会很有趣!@Deqing:请查看更新版本;这应该在C++03中也能工作。很抱歉太密集了……好的,谢谢你检查它。那太可怕了!所以OP不需要玩
std::fill
,这ch很好。尝试了
std::fill
但失败:
错误:从'long int'到'hashnode*'[-fppermissive]的转换无效。
。顺便说一句,我的项目中没有C++11:(我确信这种零初始化在C++03中也能起作用。你是说它不能起作用吗?我当然在C++03代码中使用它,gcc接受它并带有
-Wall-Wextra-pedantic errors-std=C++98
@juanchopanza:完全正确,我不知道我在想什么。我想我被你不能用arbi初始化数组的事实吓坏了。)trary内容,但当然值初始化是有效的。虽然知道这是否在C++98和C++03之间发生了变化会很有趣!@Deqing:请查看更新版本;这应该在C++03中也能工作。很抱歉太密集了……好的,谢谢你检查它。那太可怕了!所以OP不需要玩
std::fill
,这他很好。