诡异的模板实例化..

#include "stdafx.h"

#include <iostream>
#include <conio.h>

using namespace std;

template <typename T>
class C
{
public:
	C(int){
		cout<<"C(int)"<<endl;
	}
};

void Func(const C<double>& ) {
	cout<<"Func(C<double> const& )"<<endl;
}

int main()
{
	Func(23);

	getch();
}
//
输出:
C(int)
Func(C<double> const& ) 这里的23 怎么会由一个int 型转换成一个类呢???


template <typename T>
class C
{
public:
	C(int){
		cout<<"C(int)"<<endl;
	}
};

void Func(const C<double>& ) {
	cout<<"Func(C<double> const& )"<<endl;
}

void Func(int) {
	cout<<"Func(int)"<<endl;
}

int main()
{
	Func(23);

	getch();
}

// 输出:
// Func(int) 正确

//**********************************************************
template <typename T>
class C
{
public:
	C(int){
		cout<<"C(int)"<<endl;
	}
};

void Func(const C<double>& ) {
	cout<<"Func(C<double> const& )"<<endl;
}

void Func(int) {
	cout<<"Func(int)"<<endl;
}

int main()
{
	Func(23);

	C<int> tmpC(22);
	Func(tmpC); // error C2665: 'Func' : none of the 2 overloads could convert all the argument types

	getch();
}

//下面我把有歧义的地方注释掉..发现不能转换..
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
template <typename T>
class C
{
public:
	C(int){
		cout<<"C(int)"<<endl;
	}
};

void Func(int) {
	cout<<"Func(int)"<<endl;
}

int main()
{
	Func(23);

	C<int> tmpC(22);
	Func(tmpC);

	getch();
}

//error C2664: 'Func' : cannot convert parameter 1 from 'C<T>' to 'int'
// 为什么类不能转换成int,而前面的int可以转换成一个类呢 ???

//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
template <typename T>
class C
{
public:
	C(int){
		cout<<"C(int)"<<endl;
	}
};

void Func(const C<double>& ) {
	cout<<"Func(C<double> const& )"<<endl;
}

int main()
{
	C<int> tmpC(22);
	Func(tmpC);

	getch();
}
//再次错误error C2664: 'Func' : cannot convert parameter 1 from 'C<T>' to 'const C<T> &'
// 不能由C<int> 转换成C<double>

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
template <typename T>
class C
{
public:
	C(int){
		cout<<"C(int)"<<endl;
	}
};

void Func(const C<double>& ) {
	cout<<"Func(C<double> const& )"<<endl;
}

int main()
{
	C<double> tmpC(22);
	Func(tmpC);

	getch();
}

//正确
//C(int)
//Func(C<double> const& )


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值