Krz*_*ski 0 c++ templates cout
这是我的代码:
#include <iostream>
using namespace std;
template< typename T >
T silnia( T w ) {
cout << "not special" << endl;
}
template<>
int silnia<int>( int x ) {
cout << "special" << endl;
}
int main() {
cout << silnia<double>(5) << endl;
cout << silnia<int>(5) << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
not special
nan
special
4712544
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解哪两个额外的线来自哪里?
您可能会收到一个编译器警告(至少)告诉您模板分别返回一个T和int,但是您没有提供返回值,这是未定义的行为.您应该返回函数声明的类型.
template< typename T >
T silnia( T w ) {
cout << "not special" << endl;
return w;
}
template<>
int silnia<int>( int x ) {
cout << "special" << endl;
return x
}
Run Code Online (Sandbox Code Playgroud)
为什么这有关系?因为您正在std::cout尝试输出这些函数调用的返回值.
cout << silnia<double>(5) << endl;
cout << silnia<int>(5) << endl;
Run Code Online (Sandbox Code Playgroud)