作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的例子中,作者对隐式转换做了几点说明。你能解释一下这些评论的更多细节吗,我不是很清楚。谢谢。
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/
我是一名优秀的程序员,十分优秀!