Types 类型转换为模板返回类型 请考虑下面的代码。三个问题:
1) 如果我使用Types 类型转换为模板返回类型 请考虑下面的代码。三个问题:,types,casting,Types,Casting,1) 如果我使用T执行未在T上定义的操作,会发生什么情况 将明显有问题的int视为返回我的函数模板: 2) g++是否总是在到达模板函数T的末尾和实例之后,在末尾尝试将T转换为,在这种情况下是double,转换为int #include <iostream> template <typename T> int test(T b, T c) { return c+b; } int main(int argc, char** argv ) { std::
T
执行未在T
上定义的操作,会发生什么情况
将明显有问题的int
视为返回我的函数模板:
2) g++
是否总是在到达模板函数T
的末尾和实例之后,在末尾尝试将T
转换为,在这种情况下是double
,转换为int
#include <iostream>
template <typename T>
int test(T b, T c) {
return c+b;
}
int main(int argc, char** argv ) {
std::cout << test(0.43,-0.23);
}
3) 如果T
是一个没有明显类型转换的类(比如这里,从double
到int
),会发生什么
#包括
模板
内部测试(TB,TC){
返回c+b;
}
int main(int argc,字符**argv){
标准::cout
1) 如果我使用未定义的T执行操作,会发生什么
在T上
如果T
是没有定义操作的基元类型,或者是没有重载运算符的非基元类型,则会出现编译时错误
2) g++是否总是在结束时尝试,在结束之后
模板函数T的一个实例,用于转换T,在本例中
双精度,到整数
如果在打印到cout
之前尝试强制转换到int
,如
cout << (int) test(0.43,-0.23)
如果测试返回的类型,something
,与其中一个重载不直接匹配,则编译器应将其转换为最合适的类型(即,如果something
是非原语,则应使用In 2的无符号int
变体打印其内存地址),您是否询问编译器是否会隐式强制转换返回类型?@SamusArintest
在内部计算something
,它由T
组成,但是something
不能返回,只有int
可以。因此,我询问编译器是否会将something
强制转换为int
返回时。因此我假设“是”这将是你问题的答案。不幸的是,我没有得到你对2的解释)。但感谢你的回答-不幸的是,我还不能投票,我需要15次代表,但我会回到它,一旦我有15次代表。cout
实际上是ostream
的一个实例,它为定义了许多重载
ostream& operator<< (bool val);
ostream& operator<< (short val);
ostream& operator<< (unsigned short val);
ostream& operator<< (int val);
ostream& operator<< (unsigned int val);
ostream& operator<< (long val);
ostream& operator<< (unsigned long val);
ostream& operator<< (long long val);
ostream& operator<< (unsigned long long val);
ostream& operator<< (float val);
ostream& operator<< (double val);
ostream& operator<< (long double val);
ostream& operator<< (void* val);