c ++模板未识别类型double

时间:2017-04-28 21:54:14

标签: c++ templates double

我刚刚学习了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

1 个答案:

答案 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

Zulukas已经指出了

std::showpoint

// 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;
}

Live