为什么std :: string引用不能带char *?

时间:2017-05-31 04:36:20

标签: c++ string reference

我的代码很简单。

template<typename T>
class NamedObject{
public:

    NamedObject(std::string& name, const T& value):nameValue(name), objectValue(value)
    {

    }

private:
    std::string& nameValue;
    const T objectValue;
};

int main(int argc, char* argv[])
{
    NamedObject<int> no1("Smallest Prime Number",2);//error
    NamedObject<int> no2(std::string("Smalledst Prime Number"),2);//works

    return 0;
}

当我将第一个参数作为非参考时,将创建no1和no2对象。但是当我保持引用Visual Studio编译器给出以下错误时,

  

错误1错误C2664:'NamedObject :: NamedObject(std :: string&amp;,const   T&amp;)':无法将参数1从'const char [22]'转换为   'std :: string&amp;' c:\ users \ pkothari \ documents \ visual studio   2008 \ projects \ stackoflw \ stackoflw \ stackoflw.cpp 36

如果char *可以转换为std :: string,为什么不转换为std :: string&amp; ?有没有办法让它发挥作用?

1 个答案:

答案 0 :(得分:1)

NamedObject<int> no2(std::string("Smalledst Prime Number"),2);//works

这不适用于符合标准的编译器。它在MS Visual Studio C ++中受支持,即使它不是标准的C ++。

当预期参数为std::string&时,以下任何一个调用都不起作用。

NamedObject<int> no1("Smallest Prime Number",2);
NamedObject<int> no2(std::string("Smalledst Prime Number"),2);

当参数类型为std::stringstd::string const&时,它们都应该有用。