关于STL中stack.top()的问题,请各位解答

tony00fang 2014-08-25 02:15:05
为什么在stack 中需要定义两个top函数?

T& top(void);
const T& top(void) const;

谢谢各位
...全文
687 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2014-08-25
  • 打赏
  • 举报
回复
如果stack对象是const的, 只能读top(), 不能修改,也就是第二个重载版本。 否则可读可写(第一个版本)
mujiok2003 2014-08-25
  • 打赏
  • 举报
回复
引用 2 楼 lovesmiles 的回复:
一个返回左值,可以修改 一个返回右值,不可以修改。
引用 3 楼 lisong694767315 的回复:
一个返回左值 一个返回右值
别扯淡。
passion_wu128 2014-08-25
  • 打赏
  • 举报
回复
引用 8 楼 u013573183 的回复:
全扯淡,没一个知道真正用途的 真正的原因是为了让临时变量等常量类型也可以使用top函数
你只是说道了表象,那是C++标准规定的:类的临时对象可以转化为这个类的const&。 就算没有这个规定一样要定义两个这样的top函数 比如下面这段代码

void output(const stack<int>& s)
{
	cout << s.top() << endl;
}
int main()
{
	stack<int> s;
	s.push(1);
	output(s);
	return 0;
}
你把stack头文件里面的const T& top(void) const;函数注释掉看看,你能给我编译过? 对const的对象只能调用const函数,这是基本常识!!!
敬畏者 2014-08-25
  • 打赏
  • 举报
回复
全扯淡,没一个知道真正用途的 真正的原因是为了让临时变量等常量类型也可以使用top函数
我叫小菜菜 2014-08-25
  • 打赏
  • 举报
回复
学习了~
zhuyf87 2014-08-25
  • 打赏
  • 举报
回复
一个返回左值引用(可修改),一个返回常量左值引用(不可修改)。以后没准再加一个返回右值引用的。^_^
passion_wu128 2014-08-25
  • 打赏
  • 举报
回复
上面有句代码写错了,应该是:

stack<int> nonConstStack;
passion_wu128 2014-08-25
  • 打赏
  • 举报
回复
实用的场景不一样

	stack stack<int> nonConstStack;
	//调用这个函数:T& top(void);
	int& value = nonConstStack.top();
	return 0;

	const stack<int> constStack;
	//调用这个函数:const T& top(void) const,如果只定义了T& top(void),会导致编译错误。
	const int& value = constStack.top();
神奕 2014-08-25
  • 打赏
  • 举报
回复
一个返回左值 一个返回右值
勤奋的小游侠 2014-08-25
  • 打赏
  • 举报
回复
一个返回左值,可以修改 一个返回右值,不可以修改。
赵4老师 2014-08-25
  • 打赏
  • 举报
回复
因为这两个函数的原型不一样。

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧