簡體   English   中英

在 C++ 中初始化一個靜態成員(一個數組)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM