模板特化函数 C++

template specialization function c++

这是我的代码:

#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;
}

这是输出:

not special
nan
special
4712544

有人可以帮助我了解另外两行的来源吗?

两个函数模板都有 return 类型,但实现没有 return 任何东西。你有 未定义的行为 因为你试图使用 return 值。这与模板无关。

这是您的代码的固定版本:

#include <iostream>
using std::cout;
using std::endl;

template< typename T >
T silnia( T w ) {
    cout << "not special" << endl;
    return w;
}
template<>
int silnia<int>( int x ) {
    cout << "special" << endl;
    return x;
}

int main() {
  cout << silnia<double>(5) << endl;
  cout << silnia<int>(5) << endl;
}

输出

not special
5
special
5

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

template< typename T >
T silnia( T w ) {
    cout << "not special" << endl;
    return w;
}

template<>
int silnia<int>( int x ) {
    cout << "special" << endl;
    return x
}

为什么重要?因为您正在使用 std::cout 来尝试输出这些函数调用的 returned 值。

cout << silnia<double>(5) << endl;
cout << silnia<int>(5) << endl;