用初始化列表初始化包含const数组的Struct
Initialize a Struct containing a const array with initializer list
我使用c++ 11,并且有一个包含以下Struct的类:
struct Settings{
const std::string name;
const std::string* A;
const size_t a;
};
class X {
static const Settings s;
//More stuff
};
在.cpp
文件中我想这样定义
X::s = {"MyName", {"one","two","three"}, 3};
但这不起作用。但是,使用中间变量
确实可以工作。const std::string inter[] = {"one","two","three"};
X::s = {"MyName", inter, 3};
有没有办法做到没有中间变量?
指针不能从值列表初始化。您可以使用std::vector
代替:
#include <vector>
struct Settings{
const std::string name;
const std::vector<std::string> A;
// ^^^^^^^^^^^^^^^^^^^^^^^^
const size_t a;
};
你可以这样写:
class X {
static const Settings s;
//More stuff
};
const Settings X::s = {"MyName", {"one","two","three"}, 3};
下面是一个的实例。
正如Praetorian在评论中建议的那样,如果您可以明确指定容器的大小,并且在运行时不需要更改大小,则可以将std::vector
替换为std::array
:
#include <array>
struct Settings{
const std::string name;
const std::array<std::string, 3> A;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
const size_t a;
};
这里是的实例
这是因为你存储的是指向字符串数组的指针,而不是字符串本身;你需要一个字符串数组来指向某个地方。你所拥有的只是一个包含指向字符数组指针的大括号初始化器。
如果要存储字符串本身(例如在vector<string>
中),则第一个版本可以工作。
相关文章:
- 在结构中使用struct数组时,标量初始化器周围的牙套
- 错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员
- 用struct初始化C 向量时的构造函数误差
- 如何初始化struct []或制作别名或将C 中的现有struct []指向
- 如何使用struct构造函数在结构中初始化指针阵列
- G 将函数返回struct的原型混淆为结构初始化器
- 在C 中正确从C库中初始化Typedef struct
- 为什么我们不能在 Struct C++ 中使用硬编码或初始化值?
- 用包含同一类的struct的向量初始化
- c++中使用memset初始化具有不同值的struct数组元素
- 初始化struct向量的向量的好方法(每个向量都有一个初始值)
- struct数组的初始化
- 用初始化列表初始化包含const数组的Struct
- 初始化Struct指针
- 在struct vector中初始化vector
- struct的初始化项太多
- 初始化指向struct语法的指针
- 如何在c++中正确初始化Struct对象
- 如何使用extern关键字正确初始化struct[int]
- C++11 统一初始化'Excess elements in struct initializer'错误