使用istringstream(C ++)后缀获得很长的时间

时间:2013-12-10 13:25:44

标签: c++ literals istringstream long-long

为什么istringstream似乎无法完全读取带后缀的数字文字?

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

int main() {
    long long x = 123ULL; // shows 123ULL is a valid long long literal

    istringstream iss("123ULL");

    iss >> x;
    cout << "x is " << x << endl;

    char extra;
    iss >> extra;
    cout << "remaining characters: ";
    while(!iss.eof())
    {
        cout << extra;
        iss >> extra;
    }
    cout << endl;

    return 0;
}

此代码的输出是

x is 123
remaining characters: ULL

此行为是否由区域设置控制?任何人都可以指出我清楚istringstream::operator>>(long long)接受哪些字符串的文档?

1 个答案:

答案 0 :(得分:1)

是的,它由语言环境控制(通过num_get facet),但我听说过没有支持C ++语言文字的语言环境,而且自定义它是错误的。

Streams用于通用I / O,C ++整数文字后缀非常专业。

默认num_get方面的确切行为在第22.4.2.1节的C ++ 11标准中有所描述。该描述部分引用了C标准库中的strto*函数族。你可以在这里找到一个有点浓缩的版本:

http://en.cppreference.com/w/cpp/locale/num_get/get