std :: strings的类型转换

use*_*954 -1 c++ templates c++11

是否有可能为类提供类似全局类型转换操作符的功能?我正在寻找一种方法来揭露const char*std::string.我尝试定义一个全局运算符,但不编译.通过快速搜索并查看cpp引用,这些用户定义的转换需要是成员http://en.cppreference.com/w/cpp/language/cast_operator.

有没有任何干净(或黑客)方式传递std::string给接受的方法,const char*而不总是使用c_str().

背景:

我正在跨平台工作,我主要来自Windows.我的大多数课程都使用ATL::CString.我正在改变它们以使用它们std::string.调用c_str很好,但在单元测试代码中,每一行和每个args似乎都有太多的调用,所以试图在这里懒惰.

Nic*_*las 5

正如只有用户定义的类型可以定义自己的构造函数一样,只有用户定义的类型才能定义它们是否可以隐式转换为其他类型(或通过非explicit构造函数从其他类型转换).所以,不,你不能强迫从隐式转换std::stringconst char*从类的外部.

  • @ user3279954:你的意思是为什么`std :: string`没有隐式转换运算符?这是因为你*不应该*隐式地从`string`转换为`const char*`.事故变得太容易了,因为`std :: string`拥有内存,你可能会发现自己拿着一个被破坏的指针. (7认同)