vc8下的代码:
#include "stdafx.h"
#include <string>
using namespace std;
class A
{
public:
A(const string& s){;}
private:
A(const A& a){
}
};
int _tmain(int argc, _TCHAR* argv[])
{
A a="";
return 0;
}
这段代码按照书本上的理论应该是不能够通过编译的,但事实却通过了。
换到gcc之后,必须经过这样的修改
#include <string>
using namespace std;
class A{
public:
A(const char * cp){
}
// A(const string &s){};
A(const A &a){
};
};
int main(){
A a="";
return 0;
}
注:
1,class-type conversion(类类新转换)问题:char[] 到 string 不是C++中定义的标准转换,所以gcc在编译(A a="";)时报错,只有定义了精确匹配的A(const char * cp);gcc才得以编译通过
2,copy constructor(拷贝构造函数)问题:
private:
A(const A& a){};
但是这段代码在g++报错,因为A a="";使用了copy initialization,所以copy constructor必须是public的
由此看来在学习c++的过程中,使用更符合标准gcc可能会增进对书本讲授知识的理解
3,运行结果,无论是vc8还是gcc4,都将调用copy constructor的过程优化掉了(某种意义上说vc8优化的更彻底,连加了private都不管),gcc虽然要求能够访问copy ctor,但就算加了-O0这个编译选项,编译出的东西也不会实际去调用copy ctor
在vc8下面测试绑定到引用
class A
{
public:
A(const string& s){}
};
int _tmain(int argc, _TCHAR* argv[])
{
const A a1 = "test"; //OK!
//const A& a2 = "test"; //cannot convert from 'const char [5]' to 'const A &'
}
对于const A& a2= "test";根据C++.Standard.2nd 8.5.3.5 最后一段的说明:
“Otherwise, a temporary of type “cv1 T1” is created and initialized from the initializer expression using the rules for a non-reference copy initialization (8.5)”
这个时候需要发生这样的操作 A temporary = "test";然后将a2绑定到这个临时对象。但是前面一步没有完成,说明vc8对标准做的扩展不完备,vc8将const char[]自动转换成const string& 只适用与普通的初始化。
因此,编写符合标准的C++代码是最优的选择。
分享到:
相关推荐
学习C++的入门书籍,纸质清晰,有目录便于检索,很好的学习文档,分享给大家。
C++ Primer中文版--第四版, 可能已经重复了。这个pdf版本有较详细的目录
清晰可编辑版本,本人亲自根据chm版本制作。
C++Primer4th第四版中文版.pdf 高清版本
C++ 最新经典入门教程,英文原版
非常不错的英文版PDF!C++primer与TheC++ProgrammingLanguage(已上传)被誉为C++界的倚天屠龙!值得一看,本人也在研究,大家可以一起讨论!英文原版的是perfect的!!另有习题解答
c++ primer第1-16章读书报告,里面讲了c++ primer第五版的各种细节内容,并对之前学习的知识进行了回顾,也有各种举例说明。
C++ Primer Plus 6th CH 编程练习答案
这个是C++Primer 第4版习题解答(完整版)+源码。 C++ Primer 第四版(中英文对照阅读版).chm下载地址:http://download.csdn.net/source/3116404。
C++ Primer Plus - Examples Source Code, 6th Edition.zip 官网下载,完整版,不要积分。
C++ 在我多年以来断断续续学了好几遍,之前用《C++ 编程思想》也学过,但那本书过于陈旧了,用《C++ Primer 4th》也学过一段时间,由于书本过于沉溺细节,导致最终没法坚持下来。第五版我去年已经看过一遍了,对于...
【原书名】 C++ Primer (4th Edition) 【原出版社】 Addison Wesley/Pearson 【作者】 (美)Stanley B.Lippman,Josée LaJoie,Barbara E.Moo 【译者】 李师贤 蒋爱军 梅晓勇 林瑛 【丛书名】 图灵计算机科学丛书 ...
C++Primer(第4版)_课后习题答案
C++Primer4th第四版中文版, 这个绝对是学习c++的经典中的经典, 权威之作
C++ Primer, Fourth Edition, provides a comprehensive introduction to the C++ language. As a primer, it provides a clear tutorial approach to the language, enhanced by numerous examples and other ...
C++Primer4th中文,经典之作,学C++必备的书籍。这个版本的电子书还比较好~
该压缩文件包含C++ Primer 4th的pdf版本以及习题解答
C++是一门强大、难学、令人痛苦,但又是如此美妙的编程语言,在工业界和学术界都可以使用,《C++ Primer(第5版)》即针对初学者,也同样适用于有一定编程经验的读者,第5版配备了C++11新标准,是C++粉丝们书架上...
c++ primer 4th answer(完整版)
C++ Primer 4th 的详细习题解答