Spe*_*cer 15 c++ stream design-rationale language-lawyer
explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);
Run Code Online (Sandbox Code Playgroud)
IMO,一个类具有公共构造函数的唯一原因是在程序中使用该类的独立实例。如果仅存在一个类以使其他类从其派生(如的情况basic_ios),则该类的所有构造函数都应为protected。的构造函数std::ios_base均受保护。但是,由于某种原因,该标准的设计者将这一构造函数basic_ios公开了。
basic_ios用作几种流类型的基类,并且我不能设想用例中至少有一个不是a basic_istream或的用例basic_ostream。有一个吗?
类拥有公共构造函数的另一个原因是可以使用此构造函数签名来构造派生对象:
struct B{
B(int);
protected:
~B();
};
struct A:B{
private://no effect.
using B::B;
public:
A(void*);
};
A a(10);
Run Code Online (Sandbox Code Playgroud)
构造函数在基类中必须是公共的,因为基构造函数的 using 声明不会更改继承的构造函数的可访问性。
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |