模板特化函数 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 分别是 T
和 int
,但您没有提供 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;
这是我的代码:
#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 分别是 T
和 int
,但您没有提供 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;