在c ++中为用户输入附加long double literal后缀

时间:2016-11-28 13:55:06

标签: c++ input scanf long-double

我有一个具有长双向量的类:

MyClass{
    vector<long double> myvec;
    public:
        MyClass(){ //Constructor }

    // Some memeber functions that operate on the vector
};

我已经重载了输入操作符,我正在从用户那里获取输入,然后将其输入到向量中。我遇到的问题是如果用户输入一个超出double范围的数字,代码应该追加将long double后缀附加到输入而不是用户。这是我到目前为止所尝试的:

long double input;
...
input = (long double)(input + "L");
myvec.push_back(input);

我想过使用scanf,但是我不确定在重载输入操作符时使用它有多安全。

2 个答案:

答案 0 :(得分:4)

使用std::stold将输入文本转换为long double。不需要后缀; stold会做得对。源代码中需要后缀来告诉编译器文本所代表的类型。当您从外部源读取时,编译器并不参与,因此您必须自己对类型进行排序。

答案 1 :(得分:1)

后缀仅用于字面值,例如auto x = 12345.0L。您可以使用它们来防止隐式转换,因为浮点文字的默认类型是double 您不能在命名变量上使用它们 问题是你如何得到你的意见?