关于 std::ostream 构造函数
About std::ostream constructor
我想这样使用std::ostream
:
int main()
{
std::ostream os;
os << "something ..." << std::endl;
return 0;
}
有一个错误说 ostream 构造函数被保护:
error: ‘std::basic_ostream<_CharT, _Traits>::basic_ostream() [with _CharT = char; _Traits = std::char_traits]’ is protected.
但我记得 operator<<
可以这样重载:
// In a class.
friend std::ostream & operator<<(std::ostream& out, const String & s) {
out << s.m_s;
return out;
}
关于为什么我的代码不起作用的任何建议?
std::ostream
、std::istream
或 std::iostream
是基本的 class 流类型(例如 std::stringstream
、std::fstream
、等)在 Standard Library 中。这些 classes 受实例化保护,您只能实例化它们派生的 classes。错误信息
error: 'std::basic_ostream<_CharT, _Traits>::basic_ostream() [with _CharT = char; _Traits = std::char_traits]' is protected
告诉你同样的事情。
您的第二个示例是有效的,因为您可以使用对派生 class 的基 class 的引用。在这种情况下,没有调用构造函数,引用仅引用现有对象。这是一个如何使用 std::ostream&
到 std::cout
:
的示例
#include <iostream>
int main() {
std::ostream& os = std::cout;
os << "something ..." << std::endl;
}
在 operator<<
的重载中使用 std::ostream&
的原因是您可能不想为所有单独的流类型重载提到的运算符,而只是为了公共基础 [=其中 31=] 个具有 <<
功能。
我想这样使用std::ostream
:
int main()
{
std::ostream os;
os << "something ..." << std::endl;
return 0;
}
有一个错误说 ostream 构造函数被保护:
error: ‘std::basic_ostream<_CharT, _Traits>::basic_ostream() [with _CharT = char; _Traits = std::char_traits]’ is protected.
但我记得 operator<<
可以这样重载:
// In a class.
friend std::ostream & operator<<(std::ostream& out, const String & s) {
out << s.m_s;
return out;
}
关于为什么我的代码不起作用的任何建议?
std::ostream
、std::istream
或 std::iostream
是基本的 class 流类型(例如 std::stringstream
、std::fstream
、等)在 Standard Library 中。这些 classes 受实例化保护,您只能实例化它们派生的 classes。错误信息
error: 'std::basic_ostream<_CharT, _Traits>::basic_ostream() [with _CharT = char; _Traits = std::char_traits]' is protected
告诉你同样的事情。
您的第二个示例是有效的,因为您可以使用对派生 class 的基 class 的引用。在这种情况下,没有调用构造函数,引用仅引用现有对象。这是一个如何使用 std::ostream&
到 std::cout
:
#include <iostream>
int main() {
std::ostream& os = std::cout;
os << "something ..." << std::endl;
}
在 operator<<
的重载中使用 std::ostream&
的原因是您可能不想为所有单独的流类型重载提到的运算符,而只是为了公共基础 [=其中 31=] 个具有 <<
功能。