У меня есть класс, который имеет длинный двойной вектор:
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, но я не уверен, насколько безопасно это использовать при перегрузке оператора ввода.
использование std::stold
преобразовать входной текст в длинный двойной. Нет необходимости в суффиксе; stold
сделаю это правильно. Суффикс нужен в исходном коде сообщить компилятору, какой тип представляет текст. Когда вы читаете из внешнего источника, компилятор не задействован, поэтому вы должны сами разобраться с типом.
Суффиксы предназначены только для буквальных значений, например auto x = 12345.0L
, Вы используете их для предотвращения неявных преобразований, так как тип литерала с плавающей точкой по умолчанию double
,
Вы не можете использовать их в именованной переменной.
Вопрос в том, как вы получаете свой вклад?