| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1986 人关注过本帖
标题:C++类型转换函数和指向函数的指针
只看楼主 加入收藏
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 8楼 liufashuai
第一个问题:
默认参数只允许在函数参数中使用,由编译器来帮你传递,而对于声明函数指针时的参数列表中是不能有默认参数的,调用的时候也必须传递所有参数。
你那段代码在gcc下编译是通不过的,当然我不知道你用的是什么编译器。
第二个问题:
程序代码:
#include<iostream>
using namespace std;

class X {
public:
    X(double d) : value(d) {}
    operator double() { return value; }
private:
    double value;
};

int main()
{
    X x(1.0);
    cout << (1.0 + x) << endl;
}
如果按照你的说法,cout << (1.0 + x) << endl; 这句肯定是编译不能过的,但是在gcc4.40下却通过了,并且输出了2。
这里存在这一个隐式的转换,因为X有一个到double的类型转换函数,1.0 + x的时候,编译器就会先把x转换成double来参加运算。
如果你定义了两个基本类型的转换,那么编译器就不知道应该调用哪个转换,因为两种类型都可以隐式转换后来参加运算。就象newdos说的那样产生了二义性。

所以呢你还只是个需要加强基础的新手,不要随便否定别人的看法,更不要说别人幼稚,因为幼稚的人是你。


My life is brilliant
2012-11-27 19:43
lyj123
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:152
注 册:2010-11-15
收藏
得分:0 
回复 11楼 lz1091914999
这台联网的机子上没有装MinGw GCC/G++,我还没测试过他说的代码,现在才明白。
不过,出现 1.0+x的时候,编译器看见一个double,一个用户自定义类,不是去寻找类型转换函数吗,为什么不(隐式)调用double转换函数而会分不清调用哪个转换函数呢?

相互帮助

2012-12-01 14:19
快速回复:C++类型转换函数和指向函数的指针
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016201 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved