使用自定义 numpunct 将字符串转换为双精度不能按预期工作

Convert string to double using custom numpunct doesn't work as expected

我正在尝试使用自定义 numpunct 将字符串转换为双精度数。如果字符串不是货币样式格式,我希望转换失败——例如1,000,000.0

#include <iostream>
#include <sstream>

using namespace std;

class ThousandCommaSeparator: public std::numpunct<char>
{
public:
    ThousandCommaSeparator(){}
protected:
    virtual char do_decimal_point() const { return '.'; }
    virtual char do_thousands_sep() const { return ','; }
    virtual string_type do_grouping() const { return "";}
};

int main()
{
    istringstream ss("2015/05/03");
    ss.imbue(locale(cout.getloc(),new ThousandCommaSeparator));

    double output;

    if (ss >> output)
    {
        cout << "Success: " << output << endl;
    }
    else
    {
        cout << "Failure: " << output << endl;
    }
}

我希望上面的操作失败,但它总是成功,并将输出值设置为 2015。我猜我使用 numpunct 不正确,希望有人能指出我正确的方向!

输入流中的千位分隔符是可选的。如果它们存在,则必须正确放置它们,但它们不必存在。

因此,2015 是转换为数字的有效输入,与 std::numpunct 无关。