gpt4 book ai didi

c++ - 为什么允许这种转换?

转载 作者:行者123 更新时间:2023-11-30 01:39:59 25 4
gpt4 key购买 nike

所以我有这段代码(从 cplusplus.com 偷来的):

class A {};

class B {
public:
explicit B (const A& x) {}
B& operator= (const A& x) {return *this;}
operator A() {return A();}
};

void fn (B x) {}

int main ()
{
A foo;
B bar (foo);
bar = foo;
foo = bar;

// fn (foo); // not allowed for explicit ctor.
fn (bar);

return 0;
}

因此转换构造函数只能显式调用,因此 fn(foo); 是不允许的。这让我很困惑,因为为什么你可以做 B bar (foo); 如果你不能做 fn(foo);,我的意思是 fn(foo) 也不行最终将类型 B 的对象初始化为类型 A 的对象,就像在语句 B bar (foo); 中一样,那么它们都不会产生错误的是什么?什么在 B bar (foo); 中特别显式而在函数调用中不显式?

最佳答案

执行 B bar(foo) 意味着您正在以 foo 作为参数调用 B 的构造函数,这是一个 显式 构造.而当您调用 fn(foo) 时,编译器会尝试隐式转换 foo 以匹配函数参数类型,这是一个 隐式 转换并且因此不允许,因为您的转换构造函数被标记为 explicit

关于c++ - 为什么允许这种转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44420900/

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