用字符串文字

时间:2015-11-16 13:01:37

标签: c++ string visual-c++ constructor c++03

我最近遇到了一个使用C ++ 03的非常讨厌的问题。 我需要创建一个新的字符串类,扩展std::string的能力,提供更多方法和更方便的处理。 一切顺利,除了一个问题:如果某个函数需要一个MyString参数并且给出一个字符串文字(即"Hello"),它就无法从const char[6]转换为{{ 1}},尽管MyString有一个接受MyString的c'tor。 例如,这些行将起作用:

std::string

但是这段代码不起作用:

MyString mStr("Hello");
MyString mStr = "Hello";

因为void myFunc(const MyString& mStr); myFunc("Hello");

添加接受"no constructor exists that can perform the conversion from const char[6] into MyString"的c'tor并没有帮助解决问题,甚至尝试用不同组合的const char *标记它们也没有任何帮助。

在这个错误上花了好几个小时之后,我得出的结论是,可能无法做这样的事情,因为它可能需要两次隐式转换,编译器将无法执行,但正如我所说,添加一个来自explicit的c'tor在一步中启用转换并未改变任何内容。所以在我放弃这个之前,如果有可能解决这个问题,你们中有没有人有任何想法?

2 个答案:

答案 0 :(得分:2)

对于MyString的{​​{1}}构造函数,编译器无法从std::string const&const char*转换为std::string,以便致电MyString,因为这是两次隐式转化,而它只能做一次。请参阅this post

如果myFunc是参数,I could not reproduce your erorrs。另外,构造函数const char*在这里不会有任何好处,它甚至会禁止一个允许的隐式转换。 See it here

答案 1 :(得分:0)

使用参数“const char *”(MyString(const char *)) 定义构造函数应该可以解决这个问题。