我遇到了post,其中引入了可迭代队列。 OP在实现中使用了c
中名为std::queue
的受保护变量。
这完全有效吗?这个变量在所有实现中都具有相同的名称吗?换句话说,标准是否清楚地表明此变量必须命名为c
?
答案 0 :(得分:10)
作为参考,列出std::queue
的确切定义here。所以回答
换句话说,标准是否清楚地表明此变量必须命名为
c
?
是的,在这种情况下(和其他容器适配器类似);
template <class T, class Container = deque<T>>
class queue {
protected:
Container c;
// ...
};
但是,一般情况下,受保护和私有名称和成员的名称不是标准化的,因为这些类型并非都是从中派生出来的,而且实现是一个实现细节(并不构成实现细节的一部分)公共API);例如std::vector
没有列出任何受保护的名称。
一些std
容器和类确实定义了protected
成员的名称,特别是想到了iostreams库 - 基本上是从中派生出来的类型。
作为后续行动 - 所有编译器/库都使用c
吗?看起来好像至少是主流的(libstdc ++,libc ++和MSVC)。 libstdc ++很有意思,它包含变量上的follow comment;
/** * 'c' is the underlying container. Maintainers wondering why * this isn't uglified as per style guidelines should note that * this name is specified in the standard, [23.2.3.1]. (Why? * Presumably for the same reason that it's protected instead * of private: to allow derivation. But none of the other * containers allow for derivation. Odd.) */ _Sequence c;