new*_*int 7 c++ templates stl c++11
这个主题的标题很长而且含糊不清,但问题很简单.
我正在阅读14.8.1 Explicit template argument specification最新的C++ 11 Specs草案(N3242 = 11-0012),第375页
6如果参数类型不包含参与模板参数推导的模板参数,则将对函数参数执行隐式转换(第4节),以将其转换为相应函数参数的类型.[注意:如果明确指定模板参数,则模板参数不参与模板参数推断.例如,
template<class T> void f(T);
class Complex {
Complex(double);
};
void g() {
f<Complex>(1); // OK, means f<Complex>(Complex(1))
}
Run Code Online (Sandbox Code Playgroud)
- 尾注]
有人可以向我解释一下,它试图说什么,以及示例中发生的转换在哪里.
谢谢 !
转换正在这里进行:
f<Complex>(1);
Run Code Online (Sandbox Code Playgroud)
你正在调用一个f期望a 的函数Complex,但是你正在传递它int.有一个标准转换从int到double和用户定义的转换从double到Complex.
该标准试图说明的是,当您明确地向模板函数提供模板参数时,这些参数就像使用这些类型声明函数一样.也就是说,当你调用f<Complex>它时,其行为就像声明一样:
void f( Complex );
Run Code Online (Sandbox Code Playgroud)
否则,如果未明确指定模板参数,T则会推断出该模板参数int并且不会发生隐式转换.