首页 > 解决方案 > istringstreams 或 stringstreams 通常在 C++ 中默认初始化为什么?

问题描述

我有一个如下的类,它有一个istringstream类型的成员。在类的构造函数中,可以将istringstream类型extracted_text初始化为什么?

class user_input
{
std::string input_text;
std::istringstream extracted_text;

public:
user_input()
{
input_text="NULL";
// want to know what to initialize extracted_text with here
}
}

标签: c++stringstreamistringstream

解决方案


// want to know what to initialize extracted_text with here

你不能在这里这样做。在执行构造函数主体之前初始化类成员。如果要初始化成员,则需要在构造函数运行之前执行此操作。

istringstream 类型extracted_text 可以初始化为什么?

在这里您可以找到构造函数列表,选择一个:std::basic_istringstream::basic_istringstream。例如,您可以使用std::string列表中的 , (3) 对其进行初始化:

使用 str 的副本作为底层字符串设备的初始内容。底层 basic_stringbuf 对象构造为 basic_stringbuf<Char,Traits,Allocator>(str, mode | std::ios_base::in)。

class user_input
{
    std::string input_text;
    std::istringstream extracted_text;

    public:
    user_input() : input_text("NULL"),extracted_text("hello world")
                // ^^ member initializer list
    {
    }
};

istringstreams 或 stringstreams 通常在 C++ 中默认初始化为什么?

默认构造函数(相同链接):

默认构造函数。使用默认打开模式构造新的底层字符串设备

如果这是您想要的,则不必提供初始化程序。

在此处阅读有关构造函数和成员初始值设定项列表的更多信息。我没有提到您可以在此处阅读的默认成员初始化程序。


推荐阅读