该名称DisplayStack
表明该函数仅显示堆栈,不以任何方式更改它。因此,参数可以是对 的引用const
。但是,名称中的后缀Stack
是多余的,因为它是由参数暗示的,所以我会这样做:
#include <iostream>
using namespace std;
#include "stack.h"
typedef Stack< char > CharStack;
void display( CharStack const& stack )
{
// ... Display the stack
}
int main()
{
CharStack stack;
for( auto const ch : { 'a', 'b', 'c' } )
{
stack.push( ch );
}
display( stack );
}
注意 …
该功能已移至上方 main
。那时不需要愚蠢的纯粹声明,更少的工作。DRY:不要重复自己。
函数定义后的不正确分号已被删除。好吧,至少我认为他们是不正确的。不管是不是,它们都是多余的。
多余return 0;
的 inmain
已被删除,因为那是默认的. 然而,一些程序员更喜欢让它显式。
不利的一面是,虽然 C++11 循环可以很好地与 g++ 4.7.2 一起编译,但它会导致Visual C++ 11.0的内部编译器错误 ( ICE ):
[d:\开发\测试]
> cl foo.cpp
foo.cpp
foo.cpp(7) : 警告 C4100: 'stack' : 未引用的形式参数
foo.cpp(16):错误 C2059:语法错误:'{'
foo.cpp(16):错误 C2143:语法错误:缺少 ';' 前 '}'
c1xx:致命错误 C1063:内部编译器错误
请选择 Visual C++ 上的技术支持命令
帮助菜单,或打开技术支持帮助文件以获取更多信息
[d:\开发\测试]
> _
那好吧。
按照你的方式去做。;-)
向 Microsoft 报告的编译器错误。