gpt4 book ai didi

c++ - 使用初始化列表初始化包含 const 数组的结构

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:50 25 4
gpt4 key购买 nike

我使用 C++11 并有一个包含以下结构的类:

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};

这是一个live example .

As suggested by Praetorian in the comments ,您可能希望将 std::vector 替换为 std::array,如果您可以接受显式指定容器的大小,并且如果大小确实如此不需要在运行时改变:

#include <array>

struct Settings{
const std::string name;
const std::array<std::string, 3> A;
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
const size_t a;
};

这里是 live example .

关于c++ - 使用初始化列表初始化包含 const 数组的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16676973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com