C ++是否支持string类型的常量数组?

时间:2010-02-02 15:58:04

标签: c++ arrays

我是第一个C ++课程的编程学生,对于我最近的一个项目,我无法像在C#中那样创建一个字符串数组:

string MONTHS[ARRAY_CAPACITY] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" };
// this yields many compiler errors in C++

是否有可能在C ++中做类似的事情?

谢谢!

6 个答案:

答案 0 :(得分:15)

如果在C ++中初始化数组,那么它不需要设置大小(虽然它会接受一个),所以:

 std::string months[] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" };

为我编译g ++,我希望它也可以在其他地方编译。我希望您的错误是由于缺少std::命名空间。

答案 1 :(得分:6)

是的,确实如此:

#include <string>

int main(void)
{
    static const size_t Capacity = 12;
    std::string Months[Capacity] = { "Jan", "Feb", "Mar", "April", "May",
                                        "June", "July", "Aug", "Sep", "Oct",
                                        "Nov", "Dec" };
}

您的错误可能与其他内容有关。你还记得使用std::吗?不知道,它可能是任何东西。 Capacity大小错误了吗?等

请注意,您的代码实际上不是常量数组。这是:

#include <string>

int main(void)
{
    static const size_t Capacity = 12;
    static const std::string Months[Capacity] = { "Jan", "Feb", "Mar", "April",
 /* ^^^^^^^^^^^^ */                                 "May", "June", "July", "Aug",
                                                    "Sep", "Oct", "Nov", "Dec" };
}

此外,您实际上并不需要Capacity,正如其他人会显示的那样,如果您愿意,可以使用const char*,但您会失去{{ 1}} interface。

答案 2 :(得分:2)

常量字符串数组的首选方法可能是一个cstrings数组,

const char* MONTHS[] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", 
    "Aug", "Sep", "Oct", "Nov", "Dec" };

但是,它也可以用std :: strings,

完成
const string MONTHS[] = { string("Jan"), string("Feb"), ... };

当您使用花括号初始化数组时,某些编译器可能不允许从char *到std :: string的隐式转换;显式分配从char *构造的std :: string将修复它。

答案 3 :(得分:0)

是。您在问题中使用的语法是正确的,只要编译器理解stringstd::string并且只要{}之间的初始值设定项的数量不超过ARRAY_CAPACITY }。

当然,如果您想要一个常量数组,正如标题所示,您应该将其声明为const。没有const,如果将数组放入包含在多个翻译单元中的头文件中,则数组将具有外部链接并导致链接器错误。

const std::string MONTHS[ARRAY_CAPACITY] = { "Jan", /* and so on ... */ };

答案 4 :(得分:0)

是的,Visual C ++支持它 - 我刚刚做了类似的事情。不确定其他版本的C ++。

你是否包括图书馆? ARRAY_CAPACITY的定义是什么?

当你说“无法”时,你的意思是你有编译器/链接器错误或其他什么?你能提供更多细节吗?

答案 5 :(得分:0)

我假设您要使用std :: string,但在C ++中这是不可能的。或者至少不是这么简单。 您可以使用而不是std :: string来简单 const char * MONTH [ARRAY_CAPACITY] = {“Jan”,...}; 这可能已经成功了。

如果你真的想使用std :: string,你可能想看一下STL容器和boost库(www.boost.org)。特别是boost :: assign,它可以像你想要的那样做类似的东西。

此致 迈克尔