Types 类型转换为模板返回类型 请考虑下面的代码。三个问题:

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::

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::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
变体打印其内存地址),您是否询问编译器是否会隐式强制转换返回类型?@SamusArin
test
在内部计算
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);