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

标签 c++ c++11 operator-overloading conversion-operator

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

class MyClass {

public:

// methods ...    

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

问题是当我在类型为 MyClass 的变量上使用 static_cast 时,我得到错误“No matching conversion for static_cast from 'MyClass' to 'std::string aka …” 我在定义转换运算符时似乎遇到了同样的问题对于任何自定义类型。 explicit 修饰符是仅为转换为原始类型而定义的,还是另一个编译器错误。

最佳答案

举个例子

#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

关于c++ - 为什么显式运算符 std::string 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22209453/

相关文章:

c++ - 如何使用(模板)迭代器值创建一个集合?

c++ - is_functor C++ 特征类可能吗?

c++ - 用迭代器重载 vector 模板的ostream

c++ - 重载自定义迭代器的取消引用运算符

C++'98 - 将基类转换为派生类

c++ - Sqlite3 Select 查询慢,而插入/更新/删除没有问题

c++ - boost chrono endTime - startTime 在 boost 1.51 中返回负值

c++ - 使用带闭包的 lambda 回调

c++ - 如何创建一个只能添加一次的类?

C++结构类型重定义错误