gpt4 book ai didi

c++ - 如何初始化或更改类中数组内的值?

转载 作者:行者123 更新时间:2023-11-30 02:01:51 25 4
gpt4 key购买 nike

我正在使用一个包含字符数组的类。

class board
{
char spot[64];

public:
board();
~board(void);


};

我想在程序开始时将数组中的每个值设置为相同的字符,如何在构造函数中初始化这些值?有没有一种简单的方法可以通过索引访问和更改它们?

谢谢,

最佳答案

你不能在 C++03 中这样做。但是,可以在 C++11 的构造函数初始化列表中初始化数组:

board::board()
: spot { 1, 2, 1, 2, /* ... */ }
{ }

您可以输入值,或者想出一个神奇的可变参数模板来提供“N 个重复值”(只要类型是整数)。此外,任何缺失的元素都被零初始化(例如 char spot[4] { 1, 2 };)。

对于访问,您在类中使用 spot[i],如果需要,您可以编写合适的访问器函数(尽管您应该始终担心您的类是否只是“转发”成员-- 你真的希望你的类封装一些高阶功能)。

如果您想查看模板代码以“用固定值初始化一个 N 数组”,也许您应该将其作为一个单独的问题发布。


更新:这是一个天真的模板技巧,它将所有数组元素初始化为值 2

#include <iostream>
#include <utility>
#include <prettyprint.hpp>

class Foo
{
int arr[10];

template <typename T, T> struct Filler { };
template <typename T, bool, unsigned int, T...> struct FillHelper { };

template <typename T, unsigned int I, T V, T ...Vals>
Foo(FillHelper<T, true, I, V, Vals...>)
: arr { V, Vals... } { }

template <typename T, unsigned int I, T V, T ...Vals>
Foo(FillHelper<T, false, I, V, Vals...>)
: Foo(FillHelper<T, I == 1, I - 1, V, V, Vals...>()) { }

template <typename T, unsigned int N, T V>
Foo(Filler<T, V>, T const (&)[N])
: Foo(FillHelper<T, N == 1, N - 1, V>())
{ }

public:
Foo() : Foo(Filler<int, 2>(), arr)
{
std::cout << "Foo: " << arr << "\n";
}
};


int main()
{
Foo x;
}

输出:Foo: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

关于c++ - 如何初始化或更改类中数组内的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13777243/

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