为什么显式运算符std :: string不起作用

时间:2014-03-05 21:15:58

标签: c++ c++11

我有一个类,它有一个标记为显式的std :: string类型的转换运算符。这是班级

class MyClass {

public:

// methods ...    

    explicit operator std::string() const {
        // convert to string ...
    }
}

问题是当我在MyClass类型的变量上使用static_cast时,我得到错误“没有匹配转换为static_cast从'MyClass'到'std :: string aka ...”我在定义转换运算符时似乎有同样的问题对于任何自定义类型。是仅为转换为原始类型定义的显式修饰符,还是另一个编译器错误。

2 个答案:

答案 0 :(得分:2)

这是一个例子

#include <iostream>
#include <string>

class MyClass {

public:

// methods ...    

    explicit operator std::string() const { 
        return "Hello World";
    }
};


int main() 
{
    MyClass obj;

    std::cout << static_cast<std::string>( obj )  << std::endl;

    return 0;
}

输出

Hello World

答案 1 :(得分:0)

通过更新到最新版本的LLVM解决了问题,LLVM完全支持所有C ++ 11功能。