在头文件中初始化数组的另一种方法,无需c++ 11

Alternative way to initialize arrays in Header file without C++11

本文关键字:方法 无需 c++ 另一种 文件 初始化 数组      更新时间:2023-10-16

我在头文件中创建了一个类,它创建并填充了三个数组,如下所示:

class ExampleClass {
private:
    string array1[5] = {"test1", "test2", "test3", "test4", "test5"};
    double array2[4] = {20.7, 26.4, 27.8, 31.1};
    double array3[4] = {19.1, 25.8, 27.3, 32.3};
};

在构建时,我收到关于需要-std=c++11-std=gnu++11工作的警告。它建立良好的工作方式,我想为我,但这是我应该担心的情况下,我要把它包括在一个单一的项目,例如?

是否有一个旧的替代方案可以做完全相同的事情,或者这只可能从c++ 11开始?

这是我应该担心的情况下,我要把它包括在一个单一的项目,例如?

如果你正在为一项任务写一个项目,你应该注意任务的要求。它应该指定代码必须在其上构建和运行的平台、编译器和构建标志。如果这些要求允许您使用c++ 11,那么您就可以了,如果不允许,那么您就必须寻找替代方案。要记得在阅卷员将要使用的平台、编译器等上测试你的作业。

是否有一个旧的替代方案可以做完全相同的事情,或者这只可能从c++ 11开始?

在c++ 11之前没有完全相同的选项;在c++ 11之前,不可能为成员数组指定初始化式。最接近的方法是允许进行默认初始化,然后在构造函数中重新初始化数组:

struct S {
    string array1[5];
    S() {
        string init_values[5] = {"test1", "test2", "test3", "test4", "test5"};
        for (int i=0; i<5; ++i) {
            array1[i] = init_values[i];
        }
    }
};

c++ 11引入统一初始化:

struct S {
    string array1[5];
    S() : array1{"test1", "test2", "test3", "test4", "test5"}
    {}
};

和类内初始化:

struct S {
    string array1[5] {"test1", "test2", "test3", "test4", "test5"};
};

如果您只从数组中读取(如您在评论中所说),请添加const

注意:没有const,当您开始修改值时,以下将无法正常工作!

下面是我能想到的最好的c++ 03。虽然您可以将所有内容放入头文件,但我认为这不是一个好主意。我将展示如何使用头文件和实现文件来实现它。如果你真的需要头文件中的所有内容,并且你不知道如何修改下面的代码,请询问。

我们首先创建一个头文件foo.hpp:

#ifndef FOO_HPP
#define FOO_HPP
#include <string>
class ExampleClass {
private:
  const std::string (&array1)[5];
  const double (&array2)[4];
  const double (&array3)[4];
  ExampleClass(); // you need ctors to initialize the non-static members
};
#endif // FOO_HPP
现在您有了头文件,创建实现文件foo.cpp:
#include "foo.hpp"
namespace
{
  const std::string global_array1[5] = {"test1", "test2", "test3", "test4", "test5"};
  const double global_array2[4] = {20.7, 26.4, 27.8, 31.1};
  const double global_array3[4] = {19.1, 25.8, 27.3, 32.3};
}
// define your ctor(s)
ExampleClass::ExampleClass()
  : array1( global_array1 ),
    array2( global_array2 ),
    array3( global_array3 )
{}
相关文章: