Cyb*_*lin 4 c++ type-conversion implicit-conversion
我有一个C类,我想string使用operator string()语法将其转换为,但正如我在评论中所写,发生了一些奇怪的事情。
class C {
public:
operator string()
{
return string("anything");
}
};
int main()
{
C c;
cout << string("test:").append(c) << endl; //success
//cout << string("test:")+c<< endl;//fail
//cout << c.append("test:") << endl;//fail
cout << string("test:") + static_cast<string>(c) << endl;//success
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)//cout << string("test:")+c<< endl;//fail
std::operator+(std::basic_string)是模板。模板参数推导中不会考虑隐式转换,这会导致第二个操作数推导失败c。
类型推导不考虑隐式转换(除了上面列出的类型调整之外):这是重载解析的工作,稍后发生。
和
Run Code Online (Sandbox Code Playgroud)//cout << c.append("test:") << endl;//fail
C没有名为 的成员函数append,则代码失败。您可以显式转换c为std::string,然后append像 那样调用它static_cast<string>(c).append("test:")。
Run Code Online (Sandbox Code Playgroud)cout << string("test:").append(c) << endl; //success
string("test:").append需要一个std::string,然后隐式c转换为std::string并传递给append。(请注意,这些append都是非模板成员函数。)
Run Code Online (Sandbox Code Playgroud)cout << string("test:") + static_cast<string>(c) << endl;//success
c显式转换为std::string,然后将两个std::strings 传递给std::operator+(std::basic_string).
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |