我创建了一个模板类Array:
下面是必要的代码:
当我编译代码时,出现了一个警告:"float is promoted to double when passed through (...)". 这意味着问题源自于一个接受未知数量参数的构造函数。为什么编译器会将 float 提升为 double?有没有解决方法,或者我必须专门为 float 版本设计类?此外,如何确定编译器是否会改变其他类型...
#ifndef ARRAY_H
#define ARRAY_H
#include <iostream>
#include <cstdarg>
template< typename T >
class Array
{
public:
Array(size_t length = 0, ...);
~Array();
private:
T *m_values;
size_t m_len;
};
template< typename T>
Array< T >::Array(size_t len, ...) : m_values(0), m_len(len)
{
if(len != 0)
{
m_values = new T[len];
va_list ap;
va_start(ap, len);
for(size_t i(0); i < len; i++)
m_values[i] = va_arg(ap, T);
va_end(ap);
}
else
m_values = NULL;
}
template< typename T >
Array< T >::~Array()
{
delete[] m_values;
}
#endif // ARRAY_H
这是我的主函数
,与IT技术有关。int main()
{
Array<float> a;
return 0;
}
当我编译代码时,出现了一个警告:"float is promoted to double when passed through (...)". 这意味着问题源自于一个接受未知数量参数的构造函数。为什么编译器会将 float 提升为 double?有没有解决方法,或者我必须专门为 float 版本设计类?此外,如何确定编译器是否会改变其他类型...
std :: initializer_list <float>
代替。 - chris...
传递参数总是会将float
提升为double
。请使用initializer_list
。 - T.C.Array<std::string>
。相反,请使用std::vector
。 - PaulMcKenziestd::vector<T> m_values
替换T *m_values; size_t m_len;
,你将节省大部分开发时间(并且可能获得更好的性能)。 - M.M