Добавление длинного двойного литерального суффикса к пользовательским вводам в C++

У меня есть класс, который имеет длинный двойной вектор:

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

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

Я перегружен оператором ввода, и я беру ввод от пользователя, который затем помещается в вектор. Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь вводит число, выходящее за пределы диапазона двойного, код должен добавить и добавить длинный двойной суффикс к вводу без того, чтобы пользователь тоже имел. Это то, что я пробовал до сих пор:

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

Я думал об использовании scanf, но я не уверен, насколько безопасно это использовать при перегрузке оператора ввода.

2 ответа

Решение

Использование std::stold преобразовать входной текст в длинный двойной. Нет необходимости в суффиксе; stold сделаю это правильно. Суффикс необходим в исходном коде, чтобы сообщить компилятору, какой тип представляет текст. Когда вы читаете из внешнего источника, компилятор не задействован, поэтому вы должны сами разобраться с типом.

Суффиксы предназначены только для буквальных значений, например auto x = 12345.0L, Вы используете их для предотвращения неявных преобразований, так как тип литерала с плавающей точкой по умолчанию double,
Вы не можете использовать их в именованной переменной.
Вопрос в том, как вы получаете свой вклад?

Другие вопросы по тегам