初始化" const std :: string"来自" std :: istringstream"

时间:2015-11-04 08:03:46

标签: c++ const stdstring const-correctness istringstream

我正在尝试解析Key<whitespace>Value格式的文件。我正在读取std::istringstream对象中的文件行,并且我从中提取Key字符串。我希望避免通过将Key字符串意外更改为const字符串的值。

我最好的尝试是初始化一个临时的VariableKey对象,然后从中创建一个常量的对象。

std::ifstream FileStream(FileLocation);
std::string FileLine;
while (std::getline(FileStream, FileLine))
{
    std::istringstream iss(FileLine);
    std::string VariableKey;
    iss >> VariableKey;
    const std::string Key(std::move(VariableKey));

    // ...
    // A very long and complex parsing algorithm
    // which uses `Key` in a lot of places.
    // ...
}

如何直接初始化常量Key字符串对象?

2 个答案:

答案 0 :(得分:3)

将文件I / O与处理分开可能更好,而不是在同一个函数中创建const Key - 调用一个带{{{}的行处理函数1}}参数。

也就是说,如果您想继续使用当前型号,只需使用:

const std::string& key

无需在任何地方复制或移动任何东西。只能通过const std::string& Key = VariableKey; 访问const std::string个成员函数。

答案 1 :(得分:2)

你可以避免&#34;刮擦&#34;通过将输入提取到函数中来变量:

std::string get_string(std::istream& is) 
{
    std::string s;
    is >> s;
    return s;
}

// ...

while (std::getline(FileStream, FileLine))
{
    std::istringstream iss(FileLine);
    const std::string& Key = get_string(iss);

// ...

(将函数&结果绑定到const引用可延长其生命周期。)