曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 2516|回复: 0
打印 上一主题 下一主题

只有一个参数的构造函数是如何隐式转换的?

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2013-12-7 11:25:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Q : 只有一个参数的构造函数是如何隐式转换的?

A : 只含有一个参数的构造函数,默认定义了一个隐式转换。比如下面的代码:

[C++] 纯文本查看 复制代码
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 
class myclass {
    int a;
public:
    myclass(int x) { a = x; }
    int geta() { return a; }
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    myclass ob1(4);
 
 
    cout << ob1.geta() << endl;
 
 
    myclass ob2 = 5;    //隐式构造
 
 
    cout << ob2.geta() << endl;
 
 
    return 0;
}

在声明 ob2 这个对象时,使用的是隐式构造方式。输出结果为:
4
5

如果将 myclass ob2 = 5; 改成 myclass ob2 = 'a'; ,那么输出结果为:
4
97

字符 'a' 的 ASCII 码十进制为 97 。也就是说,原本上只是希望隐式对 int 型进行转换,但是这里对 char 型也进行了隐式转换,在有些情况下,这会造成迷惑与误解。隐式转换通常不是好主意,阻止这一做法就是使用 explicit 关键字。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-5-21 14:48 , Processed in 0.073000 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表