最初我开始尝试使用initilizer-list声明初始化const char*[3]的向量
vector<const char*[3]> v = { { "a", "b", "c" } };
Run Code Online (Sandbox Code Playgroud)
这给出了错误
matrix must be initialized with a brace-enclosed initializer
Run Code Online (Sandbox Code Playgroud)
我认为这可能是由于const char*,虽然看起来很奇怪,但却把它变成了字符串
vector<string[3]> v = { { "a", "b", "c" } };
Run Code Online (Sandbox Code Playgroud)
但错误仍然存在.我尝试了几种括号组合无济于事.实际上是否可以使用初始化列表初始化声明的结构?
它无法编译,因为std::vector它T需要CopyAssignable.无论其RHS如何,此声明都不会编译:
vector<const char*[3]> v = { { "a", "b", "c" } }; // Error
Run Code Online (Sandbox Code Playgroud)
正如这不会编译:
std::vector<const char*[3]> v;
const char* charPtrArr[3] { "a", "b", "c" };
v.push_back(charPtrArr); // Error
Run Code Online (Sandbox Code Playgroud)
这只是C风格数组不可分配的特殊情况,通过使用static_assert以下代码直接在代码中演示:
static_assert(std::is_copy_assignable<const char*[3]>()); // Error
Run Code Online (Sandbox Code Playgroud)
或者更普遍的我猜:
static_assert(std::is_copy_assignable<int[]>()); // Error
Run Code Online (Sandbox Code Playgroud)
如果你真的想要一个std::vector大小为3的数组保持char指针,那么这是无错误的C++ 11方法:
vector<array<const char*, 3>> v = { { "a", "b", "c" }, { "d", "e", "f"} };
Run Code Online (Sandbox Code Playgroud)