首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++ 构造函数有关问题

2013-12-13 
c++ 构造函数问题大家都知道,创建一个对象的时候,编译器系统会自动调用默认构造函数,如果自己定义构造函数

c++ 构造函数问题
大家都知道,创建一个对象的时候,编译器系统会自动调用默认构造函数,如果自己定义构造函数,就自己定义,于是我自己反汇编瞅瞅里面是啥,结果发现了问题很困扰


#include <iostream>
using namespace std;
class test{
public:
//test(){};
int x;
int y;
};
int main()
{
    test t;
    t.x =5;
    return 0;
}

这段代码正常情况下 test t,系统会自动调用默认构造宏函数,但是我反编译了一下(unbantu gcc环境)
g++ -o test test.cc
objdump -dS test > 1.txt
里面main函数根本没有调用什么函数,而且t.x=5,也无非就是将5赋值给栈里面的一个地方而已
但是如果我把注释打开之后,
main函数就会调用test这个函数
那么是不是说明系统自动调用默认构造函数这种说法是错误的呢??,大家有没有遇到过这种情况,踊跃讨论啊!
[解决办法]
编译器产生的默认构造函数只是一个虚概念,在汇编层面根本就没有函数。


首先我们要进一步明确隐式声明和隐式定义的实质,这两个动作都是概念上的,编译器并非真的到你的头文件中插入了相关代码,只是编译器、连接器和程序的行为表现出好像进行了这样的动作。实际上,编译器就是设置了几个bit做了标识而已。之所以要进行隐式声明,编译器只是规定了一个类可以被如何使用(Each implicit declaration is like an article in a contract that states how a certain class may be used. When the compiler implicitly declares one of the special member functions, it grants certain authorizations to the user.)

http://www.cnblogs.com/gnuhpc/archive/2012/12/10/2811920.html

热点排行