为什么不能将字符串文字传递给使用模板参数的函数?

Bob*_*ohn 2 c++

#include<iostream>
#include<string>
using namespace std;

template<typename T>
struct Node{
    T data;
    Node* left;
    Node* right;

    Node(T x) : data(x), left(NULL), right(NULL){}
};

template<typename T>
Node<T>* new_node(T x)
{
    Node<T>* return_node = new Node<T>(x);
    return return_node;
}

int main()
{
    Node<string>* root = new_node("hi"); //error!

    string x = "hi";
    Node<string>* root2 = new_node(x); //OK
}
Run Code Online (Sandbox Code Playgroud)

为什么不能在括号内使用字符串文字?有没有简单的方法来完成相同的任务而不声明字符串然后创建节点,或者这是唯一的方法吗?

For*_*veR 7

T被推断const char*,因此将被退回Node<const char*>*,但你不能将其分配给Node<string>*

你可以创建一个临时的:

new_node(std::string("hi"));
Run Code Online (Sandbox Code Playgroud)

或者你可以new_node用明确的资格打电话:

new_node<std::string>("hi");
Run Code Online (Sandbox Code Playgroud)