第2章    构造函数语意学 (The Semantics of Constructor) 关于C++,最常听到的一个抱怨就是,编译器背着程序猿做了太多事情.Conversion运算符就是最常被引用的一个样例. 2.1    Default Constructor的建构操作 C++ Annotated Reference Manual(ARM)指出"default constructors ...在须要的时候被编译器产生出来".keyword眼是"在须要的时候".被…
Default Constructor的构造操作 C++ Annotated Reference Manual书中的Section 12.1说过:default constructor 只有在编译器需要的时候才会被编译器合成出来. C++ Standard修改了C++ ARM的说法,但实际上的行为是一样的.C++ Standard[ISO-C++95]的Section 12.1说到:对于class X,如果没有任何user-declared constructor,那么会有一个default c…
C++新手一般由两个常见的误解: 如果任何class没有定义默认构造函数(default constructor),编译器就会合成一个来. 编译器合成的的default constructor会显示的设定“class内每一个data member的默认值” 一.编译器在哪种情况下才会合成默认构造函数: 对于未声明构造函数的类,只有在以下四种情况下编译器才会为它们合成默认构造函数: 类的成员有一个类对象(Member Class Object),且该成员含有默认构造函数(default Const…
一.Default Constructor的构建操作 首先大家要走出两个误区: 1).任何class如果没有定义default constructor,就会被合成一个来. 2).便以其合成出来的default constructor 会明确设定“class”内每一个data member的默认值. 那么在什么情况下,编译器才会合成一个 default constructor呢?当编译器想要的时候,那么在什么情况下编译器会合成一个nontrival default constructor呢?有以下…
本文是 Inside The C++ Object Model, Chapter 2的部分读书笔记. C++ Annotated Reference Manual中明确告诉我们: default constructor会在需要的时候被编译器产生出来.注意,这里是编译器需要,而不是程序需要.后来的C++ Standard 95修改了这种说法,但是实质上仍是相同的: For class X, if there is none user declared constrator, one default…
Copy Constructor的构造操作 有三种情况,会以一个object的内容作为另一个class object的初值: 1.  对一个object做显式的初始化操作 class X{…}; X a; X b = a; 2.当object被当做参数交给某个函数: X a; void foo(X x); foo(a); 3.  当返回值为object: X foo { X a; return a; } 假设class X显式定义了一个copy constructor,类似下面这样: X::X(…
1.Default Constructor 当编译器需要的时候,default constructor会被合成出来,只执行编译器所需要的任务(将members适当初始化). 1.1  带有 Default Constructor 的Member Class Object 编译器的出来是:如果一个class A 内含一个或者一个以上 member class objects ,那么class A 的每一个 constructor 必须调用每一个member classes 的default con…
public class Test01 { private String name; private int age; public Test01(String name){ this.name = name; } private void func1(){ //private 同一个类可以调用 String str; str = this.name; System.out.println(str); } public static void main(String []args){ Test0…
构造函数语义学--Default Constructor 篇 这一章原书主要分析了:编译器关于对象构造过程的干涉,即在对象构造这个过程中,编译器到底在背后做了什么 这一章的重点在于 default constructor 和 copy constructor 的相关知识 Default Constructor 详解 一些 C++的书籍中告诉我们:如果不写任何构造函数,那么编译器会为我们生成一个默认构造函数(default constructor) 那么,针对这个观点,有两个问题: 这句话是正确的…
本文是 Inside The C++ Object Model, Chapter 2的部分读书笔记. C++ Annotated Reference Manual中明确告诉我们: default constructor会在需要的时候被编译器产生出来.注意,这里是编译器需要,而不是程序需要.后来的C++ Standard 95修改了这种说法,但是实质上仍是相同的: For class X, if there is none user declared constrator, one default…