我试图在我的头文件中声明一组代表西装的字符串数组,并在我的实现文件中初始化它.我试过initializer_list在我的构造函数中尝试初始化它,但没有任何效果.我终于遇到了这个链接在C++中初始化const字符串的静态const数组,但是我不明白为什么这有效,而以前的方法没有.
为什么char在这里使用
static const char * const days[]
Run Code Online (Sandbox Code Playgroud)
而不是string?为什么要使用指针?
我很困惑为什么我也不能在我的头文件中声明和初始化数组.
101*_*010 11
struct Foo {
static char const *arr[];
};
char const *Foo::arr[] = {"ace_hearts", "2_hearts", "3_hearts"};
Run Code Online (Sandbox Code Playgroud)
std::string:struct Foo {
static std::string const arr[];
};
std::string const Foo::arr[] = {"ace_hearts", "2_hearts", "3_hearts"};
Run Code Online (Sandbox Code Playgroud)
std::stringand std::array和初始化列表的第三种方法:struct Foo {
static std::array<std::string, 3> const arr;
};
std::array<std::string, 3> const Foo::arr {"ace_hearts", "2_hearts", "3_hearts"};
Run Code Online (Sandbox Code Playgroud)
第一:我建议不要将字符串文字放入你的类来表示套装,如果你使用简单的东西,比如enum或char,那么制作你的逻辑要容易得多.
除此之外,在这里使用指针而不是使用诸如std :: string之类的原因是因为你存储了非常简单和精确的数据(只有四种可能性,你不需要搜索它,或者拆分它等等)因此不需要std :: string包含的所有额外功能.
实现这个的语法可能是:
static const char* const suits[4];
Run Code Online (Sandbox Code Playgroud)
这const char*是数组的类型(它是一个const char指针数组,它是C风格的字符串),并const suits [4]使它成为一个四个数组的数组,调用它们suits是无法更改的(是const).
一旦在类中声明了静态成员,就必须在其他地方和类外部初始化它.例如,在你的.h文件中你会写:
class deck{
public:
static const char* const suits[4];
}
const char* const deck::suits[4]={"hearts","spades","diamonds","clubs"};
Run Code Online (Sandbox Code Playgroud)
这就是语言语法如何与静态成员一起使用.
| 归档时间: |
|
| 查看次数: |
14062 次 |
| 最近记录: |