如果碰巧在某个地方只需要用cout输出一个字符的话,应该用单引号还是双引号。

申祷无 2013-08-09 07:59:28
最好是说一下不同的前提条件。比如如果这条输出语句会执行非常多次的话,使用单引号是否能提高效率。再比如如果考虑到这个字符可能会被修改为多个字符的话,是否直接就用双引号是更好的选择?
...全文
365 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
max_min_ 2013-08-09
  • 打赏
  • 举报
回复
引用 5 楼 mujiok2003 的回复:
[quote=引用 3 楼 max_min_ 的回复:]

单个字节输出的话的,虽然每次不需要判断'\0'字数符,

但是多很多次的系统调用,还是会浪费的!

还是要结合实际情况选择合适的方法的!

看标题:只需要输出一个字符。 [/quote] 看快了,那以字节的形式输出吧! 理由你都说了
mujiok2003 2013-08-09
  • 打赏
  • 举报
回复
引用 3 楼 max_min_ 的回复:

单个字节输出的话的,虽然每次不需要判断'\0'字数符,

但是多很多次的系统调用,还是会浪费的!

还是要结合实际情况选择合适的方法的!

看标题:只需要输出一个字符。
mujiok2003 2013-08-09
  • 打赏
  • 举报
回复
另外'A'通常是立即数, "A"则是字符串常量(要占用空间的)
max_min_ 2013-08-09
  • 打赏
  • 举报
回复

单个字节输出的话的,虽然每次不需要判断'\0'字数符,

但是多很多次的系统调用,还是会浪费的!

还是要结合实际情况选择合适的方法的!

mujiok2003 2013-08-09
  • 打赏
  • 举报
回复

//字符版本
template<class _Traits> inline
	basic_ostream<char, _Traits>& operator<<(
		basic_ostream<char, _Traits>& _Ostr, char _Ch)
	{	// insert a char into char stream
	typedef char _Elem;
	typedef basic_ostream<_Elem, _Traits> _Myos;
	ios_base::iostate _State = ios_base::goodbit;
	const typename _Myos::sentry _Ok(_Ostr);

	if (_Ok)
		{	// state okay, insert
		streamsize _Pad = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;

		_TRY_IO_BEGIN
		if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
			for (; _State == ios_base::goodbit && 0 < _Pad;
				--_Pad)	// pad on left
				if (_Traits::eq_int_type(_Traits::eof(),
					_Ostr.rdbuf()->sputc(_Ostr.fill())))
					_State |= ios_base::badbit;

		if (_State == ios_base::goodbit
			&& _Traits::eq_int_type(_Traits::eof(),
				_Ostr.rdbuf()->sputc(_Ch)))
			_State |= ios_base::badbit;

		for (; _State == ios_base::goodbit && 0 < _Pad;
			--_Pad)	// pad on right
			if (_Traits::eq_int_type(_Traits::eof(),
				_Ostr.rdbuf()->sputc(_Ostr.fill())))//真正做事的代码
				_State |= ios_base::badbit;
		_CATCH_IO_(_Ostr)
		}

	_Ostr.width(0);
	_Ostr.setstate(_State);
	return (_Ostr);
	}
//字符串版本
template<class _Elem,
	class _Traits> inline
	basic_ostream<_Elem, _Traits>& operator<<(
		basic_ostream<_Elem, _Traits>& _Ostr, const _Elem *_Val)
	{	// insert NTCS
	typedef basic_ostream<_Elem, _Traits> _Myos;

	ios_base::iostate _State = ios_base::goodbit;
        //遍历已得到字符串长度
	streamsize _Count = (streamsize)_Traits::length(_Val);	// may overflow
	streamsize _Pad = _Ostr.width() <= 0 || _Ostr.width() <= _Count
		? 0 : _Ostr.width() - _Count;
	const typename _Myos::sentry _Ok(_Ostr);

	if (!_Ok)
		_State |= ios_base::badbit;
	else
		{	// state okay, insert
		_TRY_IO_BEGIN
		if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
			for (; 0 < _Pad; --_Pad)	// pad on left
				if (_Traits::eq_int_type(_Traits::eof(),
					_Ostr.rdbuf()->sputc(_Ostr.fill())))
					{	// insertion failed, quit
					_State |= ios_base::badbit;
					break;
					}

		if (_State == ios_base::goodbit
			&& _Ostr.rdbuf()->sputn(_Val, _Count) != _Count)//真正输出的代码
			_State |= ios_base::badbit;

		if (_State == ios_base::goodbit)
			for (; 0 < _Pad; --_Pad)	// pad on right
				if (_Traits::eq_int_type(_Traits::eof(),
					_Ostr.rdbuf()->sputc(_Ostr.fill())))
					{	// insertion failed, quit
					_State |= ios_base::badbit;
					break;
					}
		_Ostr.width(0);
		_CATCH_IO_(_Ostr)
		}

	_Ostr.setstate(_State);
	return (_Ostr);
	}

mujiok2003 2013-08-09
  • 打赏
  • 举报
回复
使用单引号'A',实现中将免去遍历“A”中各个字符('A','\0')

64,647

社区成员

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

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