[英]Initialize a static member ( an array) in C++
我打算創建一個只有靜態成員和靜態函數的類。 成員變量之一是數組。 是否可以在不使用構造函數的情況下對其進行初始化? 我現在有很多鏈接錯誤...
class A
{
public:
static char a[128];
static void do_something();
};
你將如何初始化 a[128]? 為什么我不能像在 C 中那樣通過直接指定其值來初始化 a[128]?
a[128] = {1,2,3,...};
您可以,只需在您的 .cpp 文件中執行此操作:
char A::a[6] = {1,2,3,4,5,6};
如果您的成員在初始化后不會更改,C++11 允許您使用constexpr
將其全部保留在類定義中:
class A
{
public:
static constexpr const char a[] = {1,2,3}; // = "Hello, World"; would also work
static void do_something();
};
只是想知道,為什么需要在構造函數中初始化它?
通常,您將數據成員設為靜態,因此您無需創建實例即可訪問該成員。 構造函數僅在您創建實例時調用。
非常量靜態成員在類聲明之外(在實現文件中)初始化,如下所示:
class Member
{
public:
Member( int i ) { }
};
class MyClass
{
public:
static int i;
static char c[ 10 ];
static char d[ 10 ];
static Member m_;
};
int MyClass::i = 5;
char MyClass::c[] = "abcde";
char MyClass::d[] = { 'a', 'b', 'c', 'd', 'e', '\0' };
Member MyClass::m_( 5 );
好吧,我發現了一種不同的初始化方法,而無需在已經是意大利面條的 C++ 中創建額外的項目
char fred::c[4] = {};
使用C+++17
及更高版本,您可以對其進行內聯初始化,如下所示
class A
{
public:
inline static char a[2]={1,1};
static void do_something();
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.