c++ - 模板特化函数 C++

标签 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;
}

这是输出:

not special
nan
special
4712544

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

最佳答案

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

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;

关于c++ - 模板特化函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30807701/

相关文章:

c++ - 使 Thread 本地队列带有计数器

c++ - 能否将代码字符串传递到 C\C++ 宏中?

c++ - 编译时模板实例化检查

c++ - 结果 cout << "Hello"+ 1<<endl; (C++)

类函数中的c++ char数组输出

c++ - 您能否强制从抽象基类继承的类仅具有在基例中定义的公共(public)方法?

C++。当类T需要类型A模板参数时,如何为类A定义类型T的模板参数?

C++ 模板 sfinae 错误

c++ - 如何检查输出流是否为 C++ 中的 std::cout?

c++ - 无法释放C++中双链表中的节点