模板专业化函数c ++

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)

有人可以帮我理解哪两个额外的线来自哪里?

Cor*_*mer 5

您可能会收到一个编译器警告(至少)告诉您模板分别返回一个Tint,但是您没有提供返回值,这是未定义的行为.您应该返回函数声明的类型.

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)