博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++临时对象创建的问题
阅读量:4123 次
发布时间:2019-05-25

本文共 877 字,大约阅读时间需要 2 分钟。

今天遇到一个c++构造函数的奇怪问题。

ClassA{public:    /* default construction */    ClassA(){}	    /* construction */    ClassA(const char *str){}}ClassB{ public:    /* default construction */	ClassB(){}	/* construction */	ClassB(ClassA clsA){}	XXX(){}}/* test code *//* 这是正常的 */ClassB b(ClassA("sharedsecrete"));/* 这是不正常的    request for member ‘XXX’ in ‘b’, which is of non-class type*/const char *p = "sharedsecrete";ClassB b( ClassA(p) );b.XXX();/* 以下几种方式又没问题 */const char *p = "sharedsecrete";ClassB b( ClassA((const char *)p) );b.XXX();const char *p = "sharedsecrete";ClassB b( (ClassA(p) ) );b.XXX();const char *p = "sharedsecrete";ClassA a(p);ClassB b(a);b.XXX();

以上问题在(GCC) 4.8.2 20140120 (Red Hat 4.8.2-16) 出现。

目前还不是很理解这个问题的原因。以后明白了贴上来。

我猜可能是以下几个原因:

符号优先级。

临时对象的问题。//20150206补

后面反思了一下,

const char *p = "sharedsecrete";ClassB b( ClassA(p) );
这天语句可能被编译器理解成将p强制转换成classA,然后调用ClassB的构造函数。

转载地址:http://ziopi.baihongyu.com/

你可能感兴趣的文章
SQL1015N The database is in an inconsistent state. SQLSTATE=55025
查看>>
RQP-DEF-0177
查看>>
Linux查看mac地址
查看>>
Linux修改ip
查看>>
MySQL字段类型的选择与MySQL的查询效率
查看>>
Java的Properties配置文件用法【续】
查看>>
JAVA操作properties文件的代码实例
查看>>
IPS开发手记【一】
查看>>
Java通用字符处理类
查看>>
文件上传时生成“日期+随机数”式文件名前缀的Java代码
查看>>
Java代码检查工具Checkstyle常见输出结果
查看>>
北京十大情人分手圣地
查看>>
Android自动关机代码
查看>>
Android中启动其他Activity并返回结果
查看>>
2009年33所高校被暂停或被限制招生
查看>>
GlassFish 部署及应用入门
查看>>
iWatch报错: Authorization request cancled
查看>>
iWatch报错: Authorizationsession time out
查看>>
如何运行从网上下载的iWatch项目详细步骤.
查看>>
X-code7 beta error: warning: Is a directory
查看>>