我刚刚学习了c ++模板,这本书的例子编译和工作非常棒。然后在本章结尾的练习中,我尝试了自己的模板程序。代码简单地将数组传递给模板函数,它确定数组中的最大值。问题是当传递类型double数组时,模板将其视为int类型并将5显示为larges值而不是5.0。
这是我的代码
// Exercise 5.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
template <typename T>
T max5(const T array[]);
int main()
{
using std::cout;
using std::cin;
using std::endl;
int intA[5]{ 1, 2, 5, 4, 3 };
double doubleA[5]{ 1.0, 2.0, 5.0, 4.0, 3.0 };
cout << "Max int " << max5(intA) << endl;
cout << "Max double " << max5(doubleA) << endl;
cin.get();
cin.get();
return 0;
}
template <typename T>
T max5(const T array[])
{
T max = array[0];
for (int i = 1; i < 5; i++)
{
if (array[i] > max) max = array[i];
//std::cout << "Max: " << max << std::endl;
}
return max;
}
关于为什么的任何想法?
此致
Mickydint
答案 0 :(得分:1)
您正在获取正确的类型,问题在于您显示它们。
cout << "int == " << typeid(max5(intA)).name() << endl;
cout << "double == " << typeid(max5(doubleA)).name() << endl;
std::cout
有不同的方式来显示更高的精度或不同的格式。
像:
std::setprecision
std::fixed
的std ::科学
的std :: hexfloat
的std :: defaultfloat
// Exercise 5.cpp : Defines the entry point for the console application.
//
#include <iostream>
#include <typeinfo>
template <typename T>
T max5(const T array[]);
int main()
{
using std::cout;
using std::cin;
using std::endl;
int intA[5]{ 1, 2, 5, 4, 3 };
double doubleA[5]{ 1.0, 2.0, 5.0, 4.0, 3.0 };
cout << "int == " << typeid(max5(intA)).name() << endl;
cout << "double == " << typeid(max5(doubleA)).name() << endl;
cout << std::showpoint;
cout << "Max int " << max5(intA) << endl;
cout << "Max double " << max5(doubleA) << endl;
cout << std::noshowpoint;
cout << std::fixed;
cout << "Max int " << max5(intA) << endl;
cout << "Max double " << max5(doubleA) << endl;
cin.get();
cin.get();
return 0;
}
template <typename T>
T max5(const T array[])
{
T max = array[0];
for (int i = 1; i < 5; i++)
{
if (array[i] > max) max = array[i];
//std::cout << "Max: " << max << std::endl;
}
return max;
}