0

为什么 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)吗?

4

1 回答 1

1

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

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

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

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

于 2013-12-10T16:08:49.943 回答