xsputn
inefficientSection: 31.6.3.5.5 [streambuf.virt.put] Status: C++11 Submitter: Martin Sebor Opened: 2006-02-23 Last modified: 2016-01-28
Priority: Not Prioritized
View all issues with C++11 status.
Discussion:
streambuf::xsputn()
is specified to have the effect of
"writing up to n
characters to the output sequence as if by
repeated calls to sputc(c)
."
Since sputc()
is required to call overflow()
when
(pptr() == epptr())
is true, strictly speaking
xsputn()
should do the same. However, doing so would be
suboptimal in some interesting cases, such as in unbuffered mode or
when the buffer is basic_stringbuf
.
Assuming calling overflow()
is not really intended to be
required and the wording is simply meant to describe the general
effect of appending to the end of the sequence it would be worthwhile
to mention in xsputn()
that the function is not actually
required to cause a call to overflow()
.
[ 2009-07 Frankfurt ]
Move to Ready.
Proposed resolution:
Add the following sentence to the xsputn()
Effects clause in
27.5.2.4.5, p1 (N1804):
-1- Effects: Writes up to
n
characters to the output sequence as if by repeated calls tosputc(c)
. The characters written are obtained from successive elements of the array whose first element is designated bys
. Writing stops when eithern
characters have been written or a call tosputc(c)
would returntraits::eof()
. It is uspecified whether the function callsoverflow()
when(pptr() == epptr())
becomes true or whether it achieves the same effects by other means.
In addition, I suggest to add a footnote to this function with the
same text as Footnote 292 to make it extra clear that derived classes
are permitted to override xsputn()
for efficiency.
[
Kona (2007): We want to permit a streambuf
that streams output directly
to a device without making calls to sputc
or overflow
. We believe that
has always been the intention of the committee. We believe that the
proposed wording doesn't accomplish that. Proposed Disposition: Open
]