首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐式转换

隐式转换
EN

Stack Overflow用户
提问于 2011-03-08 13:06:45
回答 4查看 1.8K关注 0票数 1

在下面的示例中,作者对隐式转换提出了几点意见。你能解释一下这些评论的更多细节吗,我不太清楚。谢谢。

代码语言:javascript
复制
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
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-08 13:12:47

作者正在记录编译器会给你一个错误的情况,因为要么没有转换,要么所选的转换被标记为explicit。通过一个实际有效的案例,代码可能会更清晰:

代码语言:javascript
复制
class String{
  explicit String(int n);
  String(const char *p);
};
String  s1= ‘a’;     //error:  no implicit char->String conversion
                     // There is a combo implicit/explicit one...
                     // char (implicit) -> int (explicit) -> String

void f(String);

String g( )
{
   f(10);       //  error: no implicit int->String conversion
                //  (the String(int n) constructor is marked explicit).

   f("fred");   //  not an error: uses the String(const char *) constructor
                //  for an implicit conversion.

   f(String(10)); // not an error, explicitly calls the String(int n)
                  // constructor.

   return 10;   //  error:  no implicit int-> String conversion
}
票数 1
EN

Stack Overflow用户

发布于 2011-03-08 13:17:26

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

例如:

代码语言:javascript
复制
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的常量指针。

第二个错误涉及将int作为参数传递给需要String的函数。这意味着该函数必须隐式地从int构造String。不能这样做,因为相关的构造函数是显式的。如果您从int构造一个String,然后将该String传递给该函数,那么一切都会很顺利。

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

值得注意的一点是,如果代码中的整数是0而不是10,代码就会编译,原因是0可以隐式地强制转换为一个地址(空地址),这对于接受指针的构造函数来说是一个有效值。

代码语言:javascript
复制
String s;
s = 0;   // ok
s = '\0' // ok
票数 2
EN

Stack Overflow用户

发布于 2011-03-08 13:16:39

注释基本上表明,编译器无法知道如何转换为String数据类型或从how数据类型转换为how数据类型。

请参阅:http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/cplr383.htm

还有:http://www.glenmccl.com/tip_023.htm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5228570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档