我知道它用来得到包含c的字符串,类似于std::string.c_str().
但是我该如何使用运算符?运算符在这里重载是什么:String8 :: operator const char *()const
//android/frameworks/base/include/utils/String8.h
458 inline String8::operator const char*() const
459 {
460 return mString;
461 }
我知道它用来得到包含c的字符串,类似于std::string.c_str().
但是我该如何使用运算符?运算符在这里重载是什么:String8 :: operator const char *()const
//android/frameworks/base/include/utils/String8.h
458 inline String8::operator const char*() const
459 {
460 return mString;
461 }
这是一个user-defined conversion,它允许您从用户定义的类型转换为另一种类型。
你可以做这样的事情,使用它从String8
对象获得const char*
。
String8 str = "Hello";
const char *cptr = str; // gets const char* from str
std::strlen(str); // std::strlen expects a const char*
这不是太在乎你如何使用它(明确的),因为让它被隐式使用。在std::string
上使用.c_str()
的地方,可以放弃.c_str()
。当然,这个问题不明确:std::string
由于很好的原因缺少这样的操作符,并且偶尔会发现自己不得不显式调用操作符,以便编译器知道要使用哪个行为。
编辑:例如响应于UncleBens'注释:
#include <iostream>
struct X
{
operator const char*() { return "hello world\n"; }
};
int main()
{
X x;
std::cout << x.operator const char*();
}
显式调用所述的操作装置铸造String8到char指针? – UncleBens 2010-12-07 07:48:09