诡异的编译器行为
来源:互联网 发布:移动应用 框架 知乎 编辑:程序博客网 时间:2024/04/19 07:53
先看几个例子:
例1:
class A
{
public:
inline void get(){cout<<"a"<<endl;}
};
A a;
a.get();
//这里,内联函数会展开吗。
//答案是不会,因它里边包含了函数调用,编译器会把内联忽略掉
例2:
class A
{
public:
A(A& a){this->x = 555;}
A& operator=(int b)
{
this->x = 444;
return *this;
}
int x;
}
A a;
a = 2;
cout<<a.x<<endl;
是否正确,答案是正确。
输出结果是多少?
可能第一感觉是要么就444,要么就555,结果是2.
例3:
class A
{
int a;
};
编译器是否会为这个类添加构造函数、析构函数、赋值函数、拷贝构造函数?
答案是不一定,得看需要而定。
结论:
编译器会为我们做很多事情,很多时候,编译器生成的代码已经跟我们想要的代码差很多了。
编译器不一定会为每个类生成构造函数、析构函数、赋值函数、拷贝构造函数。
也不一定复制的时候就调用代码中的拷贝构造函数,C++编译器会在某种程序上改变代码的布局。
总之,不要过分的把编译器的行为相当然,先入为主的思想可能会把自己陷入深深的困境之中。
- 诡异的编译器行为
- 了解编译器的行为
- C++复制构造函数的诡异行为研究
- 前端复习--js中对象的诡异行为
- 复制字符串strcpy —— 编译器的诡异
- assert 断言的不同编译器行为
- Java编译器的行为------第一节:方法
- 行为诡异的子查询与非常用谓词ANY/ALL/SOME
- 好的事情诡异诡异诡异诡异英语
- 使用系统定义宏,会使得编译器报告诡异的错误,很不容易发现。
- ajax调用action中方法诡异行为
- popstate事件在webkit中的诡异行为
- popstate事件在webkit中的诡异行为
- 很诡异的Groovy
- 诡异的C程序
- 诡异的MSN
- 诡异的测试
- 诡异的Oracle
- 应用系统移植到ARM9开发板
- oracle入门04
- 裸机系列——DMA工作
- oracle入门05
- 位运算符(按位与&、按位或|、按位异或^、按位取反~)在程序的多个判定中起的作用
- 诡异的编译器行为
- oracle06
- __asm__ volatile 之 C语言嵌入式汇编
- 原创
- java产生随机数的几种方式[转]
- 键盘监听器和鼠标监听器
- oracle01
- select函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- oracle入门07