什么是运算符在这里重载:String8 :: operator const char *()const

时间:2010-12-07 03:22:10

标签: c++ android

我知道它用于获取包含c字符串,类似于std::string.c_str().但是我该如何使用运算符?

//android/frameworks/base/include/utils/String8.h
458 inline String8::operator const char*() const
459 {  
460     return mString;
461 }  

2 个答案:

答案 0 :(得分:6)

这是一个user-defined conversion,它允许您从用户定义的类型转换为另一种类型。

您可以使用它从const char*对象获取String8来执行此类操作。

String8 str = "Hello";
const char *cptr = str; // gets const char* from str

std::strlen(str); // std::strlen expects a const char*

答案 1 :(得分:2)

与其如何使用它(明确地)不同,因为它是隐式使用它。如果您对.c_str()使用std::string,请离开.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*();
}