gpt4 book ai didi

c++ - 为什么 std::basic_ios 有一个公共(public)构造函数?

转载 作者:行者123 更新时间:2023-12-03 02:28:50 25 4
gpt4 key购买 nike

std::basic_ios has a public constructor :

explicit basic_ios (std::basic_streambuf<CharT,Traits>* sb);

IMO,类拥有公共(public)构造函数的唯一原因是在程序中使用该类的独立实例。如果一个类的存在只是为了让其他类从它派生(就像 basic_ios 的情况一样),那么该类的所有构造函数都应该 protected std::ios_base 的构造函数都是 protected 。但是,由于某种原因,标准的设计者将 basic_ios 的这个构造函数公开了。

basic_ios 用作多种流类型的基类,我无法想象一个用例至少不是 basic_istreambasic_ostream。有吗?

最佳答案

类拥有公共(public)构造函数的另一个原因是可以使用此构造函数签名来构造派生对象:

struct B{
B(int);
protected:
~B();
};

struct A:B{
private://no effect.
using B::B;

public:
A(void*);
};

A a(10);

构造函数在基类中必须是公共(public)的,因为基构造函数的 using 声明不会更改继承的构造函数的可访问性。

关于c++ - 为什么 std::basic_ios 有一个公共(public)构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59055057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com