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

Ale*_*lex 11 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++
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Mik*_*hor 15

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

 std::string months[] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec" };
Run Code Online (Sandbox Code Playgroud)

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

  • 我在ARRAY_CAPACITY宣言中错过了冒号!数字,我一发布在这里,我就找出了问题所在.很抱歉打扰你这么基本的问题.感谢您提供正确的语法! (2认同)

GMa*_*ckG 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" };
}
Run Code Online (Sandbox Code Playgroud)

您的错误可能与其他内容有关.你还记得用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" };
}
Run Code Online (Sandbox Code Playgroud)

此外,您实际上并不需要Capacity,正如其他人会显示的那样,如果您愿意,可以使用const char*它,尽管您丢失了std::string界面.


Col*_*nee 5

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

const char* MONTHS[] = { "Jan", "Feb", "Mar", "April", "May", "June", "July", 
    "Aug", "Sep", "Oct", "Nov", "Dec" };
Run Code Online (Sandbox Code Playgroud)

然而,它也可以用 std::strings 来完成,

const string MONTHS[] = { string("Jan"), string("Feb"), ... };
Run Code Online (Sandbox Code Playgroud)

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