7

为什么会打印出以下内容"A boolean!"?我意识到正在进行一些奇怪的转换,因为如果我明确地构造一个 std::string 我会得到正确的行为。但是为什么visitor::operator()(bool)在以下情况下选择重载解析呢?

#include <boost/variant.hpp>
#include <string>

typedef boost::variant<bool, std::string> type;

struct visitor : public boost::static_visitor<> {
    void operator()(bool b) const {
        std::cout << "A boolean!" << std::endl;
    }

    void operator()(const std::string& str) const {
        std::cout << "A string!" << std::endl;
    }
};

int main(int argc, char* argv[]) {
    type t = "I am a string";
    t.apply_visitor(visitor());

    return 0;
}

我正在运行 Visual Studio 2012(CTP 或不给出相同的结果)

4

1 回答 1

7

您正在t使用 (衰减到的类型) 进行初始化const char*。将指针转换bool为标准转换,而转换const char*std::string用户定义的转换。标准转换优先。

于 2013-03-26T11:45:23.657 回答