gpt4 book ai didi

c++ - 隐式转换

转载 作者:行者123 更新时间:2023-11-30 03:08:14 25 4
gpt4 key购买 nike

在下面的例子中,作者对隐式转换做了几点说明。你能解释一下这些评论的更多细节吗,我不是很清楚。谢谢。

class String{
explicit String(int n);
String(const char *p);
}
String s1= ‘a’; //error: no implicit char->String conversion
void f(String);
String g( )
{
f(10); // error: no implicit int->String conversion
return 10; // error: no implicit int-> String conversion
}

最佳答案

String 类有两个构造函数;一个用于从 int 构造一个 String,一个用于从指向 char 的 const 指针构造一个 String。这两个构造函数因此也是转换函数,因为它们确实将一种类型转换为另一种类型。但是,第一个构造函数是一个显式 构造函数。虽然第二个构造函数允许从指向 char 的指针隐式转换为 String,但第一个构造函数要求您显式请求转换。

例如:

String s;
s = 10; // error: implicit conversion from int to String
s = String(10); // ok: explicit conversion of int to String.

第一个错误注释只是说没有用于将 char 转换为 String 的构造函数。同样,我们只有两个构造函数:一个用于转换 int,另一个是指向 char 的 const 指针。

第二个错误涉及将 int 作为参数传递给需要 String 的函数。这意味着该函数必须从 int 隐式 构造一个 String。这无法完成,因为相关的构造函数是显式的。如果您从 int 构造一个 String,然后将该 String 传递给函数,一切都会很好。

第三个错误与第二个完全相同,只是这里的隐式转换(失败)是在返回 int 时返回值应该是 String .

需要注意的一件有趣的事情是,如果代码中的整数为 0 而不是 10,则代码编译。原因是 0 可以隐式转换为地址(NULL 地址), 这对于采用指针的构造函数来说是一个有效值。

String s;
s = 0; // ok
s = '\0' // ok

关于c++ - 隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5228570/

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