C++ 使用INT初始化列表初始化长双精度向量
假设我有一个简单的类:C++ 使用INT初始化列表初始化长双精度向量,c++,list,vector,initialization,C++,List,Vector,Initialization,假设我有一个简单的类: class Pvector { private: std::vector<long double> point_list; public: Pvector(std::initializer_list<long double> coords) : point_list(coords) {} Pvector(std::initializer_list<int> coords) : point_list(coords
class Pvector
{
private:
std::vector<long double> point_list;
public:
Pvector(std::initializer_list<long double> coords) : point_list(coords)
{}
Pvector(std::initializer_list<int> coords) : point_list(coords)
{}
};
这是因为我的算术运算的结果类型是
int
。所以我似乎陷入了一个难题。我希望能够将整数直接传递到Pvector
的构造函数中,但我仍然希望point\u list
的类型为long double
,并且(以某种方式)用我传递的整数初始化。我该怎么做呢?解决方案1
您可以删除第二个构造函数,但仍然可以使用
Pvector v2{1, 2};
例如:
#include <initializer_list>
#include <vector>
class Pvector
{
private:
std::vector<long double> point_list;
public:
Pvector(std::initializer_list<long double> coords) : point_list(coords)
{}
};
int main()
{
Pvector v1{1.0, 2.0};
Pvector v2{1, 2};
}
您可能会收到缩小转换范围的警告,对吗 被盗自: C++11 8.5.4/7缩小转换是一种隐式转换 […]从整数类型[…]到浮点类型,除非源是常量表达式,否则转换后的实际值将适合目标类型,并在转换回原始类型时生成原始值
因此,每次将非常量整数表达式(即变量)转换为浮点类型时,都会收到此警告。值是否适合相应类型的尾数将取决于类型(float、double、long double)和类型的实现。我知道这一点,但我仍然不确定在传递整数类型的变量时该怎么办。现在我想起来了,我想我可以静态地将它们每一个都转换为长双精度,但这也不一定是最理想的解决方案。@JohnTravolski,这对我来说不是很清楚。我不确定传入整数类型的变量是一个什么样的问题。啊哈,您的第二个解决方案似乎已经纠正了这个问题。我现在可以使用非常量整数值和变量初始化我的Pvector,即使没有第二个构造函数。谢谢,我感谢您提供的额外信息。你说得对,那是我收到的警告。
#include <initializer_list>
#include <vector>
class Pvector
{
private:
std::vector<long double> point_list;
public:
Pvector(std::initializer_list<long double> coords) : point_list(coords)
{}
};
int main()
{
Pvector v1{1.0, 2.0};
Pvector v2{1, 2};
}
#include <initializer_list>
#include <vector>
class Pvector
{
private:
std::vector<long double> point_list;
public:
// This is not necessary any more.
// Pvector(std::initializer_list<long double> coords) : point_list(coords){}
template <typename T>
Pvector(std::initializer_list<T> coords) : point_list(coords.begin(), coords.end()){}
};
int main()
{
Pvector v1{1.0, 2.0};
Pvector v2{1, 2};
}