Haa*_*hii 5 c++ initialization c++11
我使用C++ 11并拥有一个包含以下结构的类:
struct Settings{
const std::string name;
const std::string* A;
const size_t a;
};
class X {
static const Settings s;
//More stuff
};
Run Code Online (Sandbox Code Playgroud)
在.cpp文件中我想像这样定义它
X::s = {"MyName", {"one","two","three"}, 3};
Run Code Online (Sandbox Code Playgroud)
但这不起作用.但是它确实可以使用中间变量
const std::string inter[] = {"one","two","three"};
X::s = {"MyName", inter, 3};
Run Code Online (Sandbox Code Playgroud)
有没有办法在没有中间变量的情况下做到这一点?
无法从值列表初始化指针.你可以std::vector改用:
#include <vector>
struct Settings{
const std::string name;
const std::vector<std::string> A;
// ^^^^^^^^^^^^^^^^^^^^^^^^
const size_t a;
};
Run Code Online (Sandbox Code Playgroud)
然后你可以写:
class X {
static const Settings s;
//More stuff
};
const Settings X::s = {"MyName", {"one","two","three"}, 3};
Run Code Online (Sandbox Code Playgroud)
这是一个实例.
正如意见建议的执政官,你可能需要更换std::vector有std::array,如果它是可以接受的,你要明确指定容器的大小,如果大小并不需要在运行时改变:
#include <array>
struct Settings{
const std::string name;
const std::array<std::string, 3> A;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
const size_t a;
};
Run Code Online (Sandbox Code Playgroud)
这是现场的例子.
那是因为你要存储一个指向字符串数组的指针,而不是字符串本身; 所以你需要一个指向某个地方的字符串数组.你所拥有的只是一个包含指向字符数组指针的大括号初始化器.
如果您要自己存储字符串(vector<string>例如,在a中),那么第一个版本将起作用.