我有一个具有长双向量的类:
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,但是我不确定在重载输入操作符时使用它有多安全。
答案 0 :(得分:4)
使用std::stold
将输入文本转换为long double。不需要后缀; stold
会做得对。源代码中需要后缀来告诉编译器文本所代表的类型。当您从外部源读取时,编译器并不参与,因此您必须自己对类型进行排序。
答案 1 :(得分:1)
后缀仅用于字面值,例如auto x = 12345.0L
。您可以使用它们来防止隐式转换,因为浮点文字的默认类型是double
您不能在命名变量上使用它们
问题是你如何得到你的意见?