模板专用化函数 C++

template specialization function c++

本文关键字:函数 C++ 专用      更新时间:2023-10-16

这是我的代码:

#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

有人可以帮助我了解另外两条线是从哪里来的吗?

您可能会

收到编译器警告(至少),告诉您模板分别返回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
}

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

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

两个函数模板都有一个返回类型,但实现不返回任何内容。您有未定义的行为,因为您正在尝试使用返回值。这与模板无关。

下面是代码的固定版本:

#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