【发布时间】:2014-12-29 20:05:50
【问题描述】:
我是 C++ 的初学者,具有一定的 Java 背景。我遇到了这段示例代码
class simple_cbuf {
public:
enum { default_size = 100; };
explicit simple_cbuf(size_t size =
default_size);
~simple_cbuf();
size_t size() const;
bool empty() const;
int top() const; /* see below */
void pop();
void push(int new_value);
private:
/* whatever you want */
};
在我看来,这段代码使用公共枚举来保存缓冲区的默认大小。这是c ++中的常见做法吗?在 Java 中,我会将其设为“私有静态最终 int”常量
【问题讨论】:
-
嗯,这只是编码风格/个人喜好。它当然可以是某个地方的
static const int。 -
或者直接将默认值作为默认参数。
-
未命名的、无范围的枚举的好处是它们保证不占用空间,并且永远不需要单独的定义。 (如果它是
static const int并且您将它传递给采用const int &的函数,这算作 odr-use 并且您需要一个定义;如果它是一个无作用域的枚举器,编译器将只初始化一个临时的int用于那个。) -
@T.C.感谢您的解释!但我不明白为什么未命名、未限定范围的枚举不占用空间?