C++ 如何初始化字符串的std::数组?

C++ 如何初始化字符串的std::数组?,c++,stdstring,stdarray,list-initialization,C++,Stdstring,Stdarray,List Initialization,我有一个std::array,用于保存要读入程序的文本文件的路径名。到目前为止,我声明数组,然后为每个std::string对象分配值 #include <array> #include <string> using std::array; using std::string; ... array<string, 4> path_names; path_names.at(0) = "../data/book.txt"; path_names.at(0) = "

我有一个
std::array
,用于保存要读入程序的文本文件的路径名。到目前为止,我声明数组,然后为每个
std::string
对象分配值

#include <array>
#include <string>
using std::array;
using std::string;
...
array<string, 4> path_names;
path_names.at(0) = "../data/book.txt";
path_names.at(0) = "../data/film.txt";
path_names.at(0) = "../data/video.txt";
path_names.at(0) = "../data/periodic.txt";

如果不是对于
std::string
,我将如何执行相同的操作?创建这些字符串需要调用构造函数。它并不像初始化一堆
int
s那样简单。如何做到这一点?

这可以通过两种方式实现:

  • 在列表初始化中使用字符串文字
  • 数组路径_name={../data/book.txt“,”../data/film.txt“,”../data/video.txt“,”../data/periodic.txt“}

  • 为字符串指定路径名并在初始化中使用字符串
    string s1=“../data/book.txt”
    string s2=“../data/film.txt”
    string s3=“../data/video.txt”
    string s4=“../data/periodic.txt”
    数组路径_name={s1,s2,s3,s4}

    如果您想避免在此处复制,可以使用
    std::move

    array<string, 4> path_names = {std::move(s1), std::move(s2), std::move(s3), std::move(s4)};
    
    数组路径_name={std::move(s1)、std::move(s2)、std::move(s3)、std::move(s4)};
    
    您是否尝试在初始值设定项中使用字符串文字而不是数字?我没有想到这会起作用。我会试试看。如果你确定索引在范围内(在给定的情况下适用),那么可能重复的
    进行范围检查-过时,所以更喜欢索引运算符
    []
    …@Galaxy是和是…第二个变体在我看来并不比问题中的那个好;至少,我会移动字符串,而不是复制(
    std::move(sN)
    )…同时更新了答案,建议
    std::move
    array<string, 4> path_names = {std::move(s1), std::move(s2), std::move(s3), std::move(s4)};