2016-11-28 12 views
0

У меня есть класс, который имеет длинный двойной вектор:прилагая длинный двойной буквальный суффикс, вводимый пользователя в C++

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

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

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

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

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

+2

Литералы предназначены только для глаз человека. В компилируемом коде нет остатка, поэтому проблема заключается в том, как вы берете на себя вход. – StoryTeller

+0

'input +" L "' -> 'long double + const char *' –

ответ

4

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

1

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