如何使用一行代码初始化string类型的数组?

时间:2013-05-27 03:39:27

标签: c++ arrays string visual-c++ initialization

我声明了一个大小为100 string bin[100];的数组我希望每个数组都被初始化为""。如何用一行初始化所有这些?我试过像bin[] = "";这样的东西,但它不起作用。任何帮助将不胜感激。

默认构造函数

RandomString()
{
    input = "";
    //bin[] = "";
}

2 个答案:

答案 0 :(得分:2)

你不需要做任何特别的事情,只需string bin[100];即可。将为数组的每个元素调用std::string的默认构造函数。

如果数组是某个类的成员,请在成员初始化列表中初始化它:

struct SomeClass
{
    std::string bin[100];
    SomeClass() : bin() // You can initialize arrays with () in the mem-init list
    {
    }
};

*从技术上讲,即使你没有将bin()添加到mem-init列表,也会调用默认构造函数,但这是一种很好的做法(因为内置类型将保持未初始化状态)。

在C ++中,类的成员通过初始化列表初始化。例如,在以下示例中,代码存在差异:

// First example
struct MyClass
{
    int i;
    SomeClass() : i(1)
    {
    }
};

// Second example
struct MyClass
{
    int i;
    SomeClass()
    {
        i = 1;
    }
};

在第一个示例中,初始化列表中的i 已初始化1。在第二个示例中,1分配i。您可以将上述代码视为执行以下操作:

int i = 1; // First example

int i; // Second example
i = 1; 

对于像int这样的内置类型,两者之间没有太大区别,但是在某些情况下,例如当成员被声明为const时,上述差异非常重要:

struct SomeClass
{
    const int i;
    SomeClass()
    {
       i = 1; // Error!!
    }
};

在上面的例子中,const成员必须在初始化列表中初始化。

答案 1 :(得分:0)

以你的方式,你刚刚初始化了数组的第一个元素,默认的ctor初始化为null字符串。你想要初始化100个元素,只为每个元素做同样的事情。