快速而愚蠢的問題。 如果我不允許使用全局變量,我該如何聲明數組的大小?如何在C++中聲明一個數組的固定大小
假設我有一個文件Album.h
:
class Album {
private:
Song songs[MAX_SONGS];
//...
}
我在哪裏把MAX_SONGS = 30
? const int MAX_SONGS = 30
被認爲是一個變量的權利? 請注意,整個程序的大小應該是已知的。
快速而愚蠢的問題。 如果我不允許使用全局變量,我該如何聲明數組的大小?如何在C++中聲明一個數組的固定大小
假設我有一個文件Album.h
:
class Album {
private:
Song songs[MAX_SONGS];
//...
}
我在哪裏把MAX_SONGS = 30
? const int MAX_SONGS = 30
被認爲是一個變量的權利? 請注意,整個程序的大小應該是已知的。
class Album {
private:
static const int MAX_SONGS = 100;
Song songs[MAX_SONGS];
//...
};
請注意,靜態常量變量的內聯初始化只允許那些類型爲整數的內聯初始化。還要注意,不管初始化如何,這仍然只是一個聲明而不是定義。你通常不需要定義,雖然在某些情況下你會這樣做。
至於可見性,您可以提供一個靜態獲取函數,它將返回MAX_SONGS。
public:
static int GetMaxSongs() { return MAX_SONGS; }
const int MAX_SONGS = 30
被認爲是一個變量吧?
是,MAX_SONGS
是一個變量,但它是一個恆定可變。它不能改變。
這並不是全球變量不可取,而是全球可變狀態是不可取的,如果可以避免的話。這裏沒有可變狀態:MAX_SONGS
不能改變。
常量變量?... – 2012-01-11 21:22:21
@PaulManta:是的。事實上,這是什麼。 – 2012-01-11 21:22:33
更重要的一點是'MAX_SONGS'是一個_constant表達式_。考慮一個替代的'extern const int MAX_SONGS;'在其他TU中有一個初始化器不會是一個_constant表達式_即使它是一個常量變量。 – 2012-01-11 21:22:47
您也可以使用#define
預處理器命令。
#define MAX_SONGS 30
在Album.cpp
#include "Album.h"
class Album {
private:
Song songs[MAX_SONGS];
//...
}
#define是否在其他模塊中可見? – Pincopallino 2012-01-12 16:52:19
爲此,他們必須包含Album.h。你也可以創建一個Contants.h文件並將其導入到Album.h以及任何需要的地方 – 2012-01-12 19:49:05
爲了避免static
用法,使用enum
:
class Album {
private:
enum { MAX_SONGS = 30 };
Song songs[MAX_SONGS];
//...
}
'const int的MAX_SONGS = 30;'被認爲是成爲一個「常量」。你也可以使用'#define MAX_SONGS 30'預處理指令。 – Cyclonecode 2012-01-11 21:20:12
是否有沒有使用容器的原因? – Tony 2012-01-11 21:20:37
使用'std :: vector',你不必定義最大尺寸。 –
2012-01-11 21:21:24