0

如何初始化和使用静态常量字符串数组?我做了一个例子,标题:

const static string validFileTypesToSendToClient[];

实施:

const string Settings::validFileTypesToSendToClient[] = {"html","css","js"};

这有效,但我该如何使用它?例如在这种情况下:

string fileTypesToAllow[] = Settings::validFileTypesToSendToClient;

我得到错误:

Initialization with ‘{…}’ expected for aggregate object.

那么,我怎样才能以正确的方式使用字符串的静态常量数组呢?我已经找到了这个:Initializing a static const array of const strings in C++,但他们没有描述如何使用它。

4

4 回答 4

1

您不能将一个数组分配给另一个数组,您必须一个一个地复制元素:

 string fileTypesToAllow[3];

 for(int i=0; i<3; i++)
 {
    fileTypesToAllow[i] = Settings::validFileTypesToSendToClient[i];
 }

要访问数组,您可以这样做:

std::cout << Settings::validFileTypesToSendToClient[0] << std::endl;

可以只使用向量而不是数组或 std::array

struct Settings
{
  const static std::vector<std::string> validFileTypesToSendToClient;
  static std::vector<std::string> makeData() 
  { 
    std::vector<std::string> v;
    v.push_back("html");
    v.push_back("css");
    v.push_back("js");
    return v;
  }
};

执行:

const std::vector<std::string> Settings::validFileTypesToSendToClient = Settings::makeData();

现在您可以轻松复制validFileTypesToSendToClient

int main()
{      
  std::vector<std::string> fileTypesToAllow = validFileTypesToSendToClient;
  return 0;
}
于 2012-12-30T10:54:07.560 回答
1

这一行:

string fileTypesToAllow[] = Settings::validFileTypesToSendToClient;

是错的。C/C++ 不允许数组赋值。您可以将一个数组分配给指针,但可以分配另一个数组。

于 2012-12-30T10:54:25.037 回答
1

C++ 中不存在内置数组赋值。但是,您可以这样做:

#include <array>
#include <string>

std::array<std::string, 3> string_array = 
{
  "foo", 
  "bar", 
  "baz", 
};

int main()
{
  std::array<std::string, 3> second_string_array = string_array;
}

它是 C++11,但现在几乎所有编译器都支持它。(顺便说一句,为什么您首先要复制这样的数组似乎值得怀疑。此外,这是我考虑使用 const char* 的情况之一,即使您肯定会忘记该数组的分配。)

于 2012-12-30T11:00:47.257 回答
1

在下一行中,您将声明一个新的字符串数组,并尝试使用另一个数组对其进行初始化。这在 C++ 中是不允许的。

string fileTypesToAllow[] = Settings::validFileTypesToSendToClient;

您应该做的是声明数组,然后将值复制过来:

const int size = 3; // Same as the size of the Settings::validFileTypesToSendToClient array
string fileTypesToAllow[size];

for(int i = 0; i < size; i++)
{
    fileTypesToAllow[i] = Settings::validFileTypesToSendToClient[i];
}
于 2012-12-30T11:04:58.810 回答