explicit(bool) 是 C++20 引入的一个特性,称为 Conditionally explicit。 核心目的是简化泛型类型的实现,提高性能,减少编译时间。 举个简单的例子: void foo(std::string); foo("a"); // OK foo("a"sv); // Error 因为没有相应的稳式转换, std::string 对于 std::string_view 的构造是 explicit 的,所以编译失败。这是普通的 explicit 用法,若 foo() 的参数变为 wrapper<std::string>,这里的 wrapper 就是前面所说的泛型类型,此时依旧想保持 foo() 的调用行为,在 C++20 之前可以使用 SFINAE。 template<class T> struct wrapper { template<class U, std::enable_if_t<std::is_convertible_v<U, T>>* = nullptr> wrapper(U const& u) :… Continue Reading T230418 explicit(bool)