c++ - Boost变体模糊构造

标签 c++ boost boost-variant

<分区>

Boost Variant 文档说明了接受任意类型的构造函数的以下内容:

template<typename T> variant(T & operand);
  • 要求:T 必须明确可转换为一种有界类型(即 T1、T2 等)。

接受const T&T&&的构造函数也是如此。所以我预计以下代码不会编译:

boost::variant<std::string, bool> v = "text";

但是代码编译后,v 变成了 bool,这是我绝对不想要的。当然,解决方案是将字符串文字包装在 std::string 构造函数中。我的问题是:

  1. 为什么这段代码可以编译?
  2. 它如何选择类型(因为 const char* 可以转换为 std::stringbool)?

最佳答案

通常,用户定义的转换会将重载解析过程丢给标准转换。

有一个来自 const char 的内置转换指向 bool 的指针优于 const char * 的非内置转换至 std::string (例如,参见 Implicit conversions )。

std::string ,虽然是标准库的一部分,但不是内置类型,因此只有在转换为内置类型后才会考虑其转换构造函数。

一些引用资料:

关于c++ - Boost变体模糊构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802885/

相关文章:

c++ - 将 std::vector、boost::variant 和类型与引用字段一起使用

c++ - 如何修改boost::apply_visitor返回值?

c++ - 如何使用 openMP 将顺序程序转换为并行程序?

c++ - 未处理的异常访问冲突写入位置 0xCDCCDCD - 在结构 C++ 中

c++ - 我可以只在单元测试中使用 BOOST_CHECK 吗?

C++:在 header 中实例化boost::thread

c++ - 使用 Peterson 的 N 进程算法的信号量实现

c++ - Boost Spirit X3 eol 意外行为

c++ - 可移植 boost.xpressive

c++ - Boost::variant 无法为 std::ostream 解析运算符<<