快速而愚蠢的问题。 如果我不允许使用全局变量,我该如何声明数组的大小?如何在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