首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-08-16 
如果碰巧在某个地方只需要用cout输出一个字符的话,应该用单引号还是双引号。最好是说一下不同的前提条件。比

如果碰巧在某个地方只需要用cout输出一个字符的话,应该用单引号还是双引号。
最好是说一下不同的前提条件。比如如果这条输出语句会执行非常多次的话,使用单引号是否能提高效率。再比如如果考虑到这个字符可能会被修改为多个字符的话,是否直接就用双引号是更好的选择?
[解决办法]
使用单引号'A',实现中将免去遍历“A”中各个字符('A','\0')
[解决办法]


//字符版本
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);
}


[解决办法]
另外'A'通常是立即数, "A"则是字符串常量(要占用空间的)

热点排行