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++ Primer 4th Edition》是C++编程语言领域中的经典入门教程,由Lippman、Lajoie和 Moo三位作者共同编写。这本教材以其深入浅出的讲解方式和丰富的实例,深受广大C++初学者和专业开发者的喜爱。在第四版中,作者...
《C++ Primer中文版》是一本为初学者设计的C++编程教材,旨在帮助读者深入理解和掌握C++语言。这本书的高清版本提供了清晰的文本和图表,使得阅读体验更佳,尤其适合长时间学习和查阅。目录的存在使得学习者能够快速...
### C++ Primer 第四版 —— 详尽解析与学习指南 #### 一、书籍概述 《C++ Primer》第四版是一本全面介绍C++语言的权威教程。它不仅为初学者提供了清晰的教学方法,还深入地介绍了语言的细节,并强调了当前有效的...
C++ Primer中文版--第四版, 可能已经重复了。这个pdf版本有较详细的目录
《C++ Primer 5th》是C++编程领域的一部权威著作,由Lippman、Lajoie和 Moo三位专家合著。这本书以其深入浅出的讲解方式和丰富的实例,深受程序员们的喜爱。5th版更是针对C++11、C++14和C++17标准进行了全面更新,...
非常不错的英文版PDF!C++primer与TheC++ProgrammingLanguage(已上传)被誉为C++界的倚天屠龙!值得一看,本人也在研究,大家可以一起讨论!英文原版的是perfect的!!另有习题解答
13. 第十三章复制控制:探讨对象的创建、复制和销毁,包括拷贝构造函数、赋值运算符重载以及浅拷贝和深拷贝的问题。 14. 后续章节还会涉及模板、异常处理、命名空间、STL容器的高级用法、智能指针、多态、继承、虚...
10. 类的定义、构造函数、复制控制、重载操作符、继承和多态等面向对象编程的核心概念。 11. 模板与泛型编程,包括函数模板、类模板和模板特化的使用。 12. 面向对象编程技术,如异常处理、命名空间、多重继承、虚...
《C++ Primer》是有名的C++编程教材,其第五版(5th Edition)深入浅出地介绍了C++语言的基础知识以及C++11新标准的特性。这本书由Lippman、Lajoie和 Moo三位作者共同编写,是C++初学者和进阶者的重要参考书籍。 1....
这个是C++Primer 第4版习题解答(完整版)+源码。 C++ Primer 第四版(中英文对照阅读版).chm下载地址:http://download.csdn.net/source/3116404。
C++ Primer Plus-第6版-附录文件和源代码
《C++ Primer 5th Edition》是C++编程语言领域的一本权威教材,由Lippman、Lajoie和 Moo三位作者共同编写。这本书详细介绍了C++的基础知识、高级特性和最佳实践,是学习和进阶C++编程的必备参考书籍。 首先,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++ Primer 4th版中,你会学到如何使用C++的基本语法,包括变量声明、数据类型、运算符、流程控制(如if、switch、循环等)、函数的定义和调用。书中还详细介绍了C++中的指针和引用,这是理解C++内存管理和低级...
1. **基础语法**:C++ Primer 习题解答首先会引导读者熟悉C++的基本语法,包括变量声明、数据类型(如整型、浮点型、字符型)、运算符(算术、关系、逻辑、位操作)、控制流(if语句、switch语句、循环结构for、...
c++primer清晰非扫描版本,学习c++的经典版本,c++基本语法,c++11新特性!(文件较大百度网盘链接和密码)
《C++ Primer 4th》是一本广受欢迎的C++编程教材,由Lippman、Lajoie和 Moo三位专家合著。这本书以其深入浅出的讲解方式和丰富的实例,深受初学者和经验丰富的程序员的喜爱。它覆盖了C++语言的基础、高级特性,以及...
### C++ Primer 第四版:现代C++编程的权威指南 #### 核心知识点概览 **1. 现代C++编程风格的转变** - **从注重运行时效率到提高编程效率**:随着时间的推移,C++语言的发展重心已经从优化程序执行速度转移到...
C++是一门强大、难学、令人痛苦,但又是如此美妙的编程语言,在工业界和学术界都可以使用,《C++ Primer(第5版)》即针对初学者,也同样适用于有一定编程经验的读者,第5版配备了C++11新标准,是C++粉丝们书架上...
《C++ Primer 4th 习题解答》是针对C++初学者和进阶者的一份宝贵资源,它详尽地解析了C++ Primer第四版中的各类习题,旨在帮助读者深入理解C++语言的核心概念和语法。这本书的习题解答涵盖了从基本语法到高级特性的...