basic_istream 类缺少模板默认参数

问题描述 投票:0回答:1

我正在检查 basic_istream 类的实现。我在https://gcc.gnu.org/onlinedocs/gcc-13.2.0/libstdc++/api/a00113_source.html#l00095找到了实现。 让我添加一个片段。

在创建 basic_istream 类的对象时,我必须传递两个模板参数,因为在 basic_istream 类声明中未声明默认参数。

我仍然可以仅使用一个模板参数构建一个对象,如下例所示。

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    basic_stringbuf<char>string("Basic ios",ios_base::in| ios_base::out);
    basic_istream<char> bis(&string);
    
    return 0;
}

有人可以澄清它对我来说如何运作吗?

c++ istream
1个回答
0
投票

在创建 basic_istream 类的对象时,我必须传递两个模板参数,因为在 basic_istream 类声明中未声明默认参数。

不,这是一个错误的假设。

std::baisc_stream
有一个构造函数,可以从传递的构造函数参数中推导出模板参数。构造函数是:

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

此构造函数将在您的示例中使用,以推导出两个模板参数。请参阅类模板参数推导

© www.soinside.com 2019 - 2024. All rights reserved.