gpt4 book ai didi

c++ - 为什么 const char* 隐式转换为 bool 而不是 std::string?

转载 作者:行者123 更新时间:2023-12-04 11:06:54 25 4
gpt4 key购买 nike

#include <iostream>
#include <string>

struct mystruct{
mystruct(std::string s){

std::cout<<__FUNCTION__ <<" String "<<s;
}

explicit mystruct(bool s) {

std::cout<<__FUNCTION__<<" Bool "<<s;
}
};


int main()
{

const char* c ="hello";

mystruct obj(c);

return 0;
}
输出:
mystruct Bool 1
  • 为什么const char*隐式转换为 bool而不是 std::string ,虽然构造函数需要 explicit类型 ?
  • 隐式转换优先级在这里如何应用?
  • 最佳答案

    因为来自 const char* 的隐式转换至 bool被限定为标准转换,而 const char*std::string是用户定义的转换。前者排名更高,在overload resolution中获胜。 .

    A standard conversion sequence is always better than a user-defined conversion sequence or an ellipsis conversion sequence.


    顺便说一句: mystruct obj(c);执行 direct initialization , explicit转换构造函数,包括 mystruct::mystruct(bool)也被考虑。结果, c转换为 bool然后传递给 mystruct::mystruct(bool)作为构造 obj 的参数.

    Direct-initialization is more permissive than copy-initialization: copy-initialization only considers non-explicit constructors and non-explicit user-defined conversion functions, while direct-initialization considers all constructors and all user-defined conversion functions.


    关于 explicit specifier ,
    1. Specifies that a constructor or conversion function (since C++11) or deduction guide (since C++17) is explicit, that is, it cannot be used for implicit conversions and copy-initialization.

    关于c++ - 为什么 const char* 隐式转换为 bool 而不是 std::string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66452781/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com