正在从istringstream(C++)中获取带有后缀的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)接受哪些字符串的明确文档吗?

是的,它由语言环境控制(通过num_get方面),但我听说过的任何语言环境都不支持C++语言文字,因此自定义它是错误的。

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

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

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

相关内容

  • 没有找到相关文章

最新更新