没有合适的资源?快使用搜索试试~ 我知道了~
在我的早期印象中,C++这门语言是软件工程发展过程中,出于对面向对象语言级支持不可或缺的情况下,一群曾经信誓旦旦想要用C统治宇宙的极客们妥协出来的一个高性能怪咖。 它驳杂万分,但引人入胜,出于多(mian)种(shi)原因,我把它拿出来进行一次重新的学习。 这篇笔记从G++编译出的汇编代码出发,对部分C++的常用面向对象特性进行原理性解释和总结,其中包括 引用、类(成员函数,构造函数)、多态(编译时,运行时)、模板与泛型 Here we go! 引用 这是一个老生常谈的话题了,C++ primer中文译本上说引用是对象的一个别名,别名是什么鬼? 上码: i
资源详情
资源评论
资源推荐
C++常用特性原理解析常用特性原理解析
在我的早期印象中,C++这门语言是软件工程发展过程中,出于对面向对象语言级支持不可或缺的情况下,一群曾经信誓
旦旦想要用C统治宇宙的极客们妥协出来的一个高性能怪咖。
它驳杂万分,但引人入胜,出于多(mian)种(shi)原因,我把它拿出来进行一次重新的学习。
这篇笔记从G++编译出的汇编代码出发,对部分C++的常用面向对象特性进行原理性解释和总结,其中包括 引用、类(成
员函数,构造函数)、多态(编译时,运行时)、模板与泛型
Here we go!
引用
这是一个老生常谈的话题了,C++ primer中文译本上说引用是对象的一个别名,别名是什么鬼?
上码:
int invoke(int a) {
return ++a;
}
int main(int argc, char **argv) {
int a = 123; // movl $123,-20(%rbp)
int *pa = &a; // leaq -20(%rbp),%rax
// movq %rax,-16(%rbp)
int &ra = a; // leaq -20(%rbp),%rax
// movq %rax,-8(%rbp)
invoke(a); // movl -20(%rbp),%eax
// movl %eax,%edi
// call _Z6invokei
invoke(*pa); // movq -16(%rbp),%rax
// movl (%rax),%eax
// movl %eax,%edi
// call _Z6invokei
invoke(ra); // movq -8(%rbp),%rax
// movl (%rax),%eax
// movl %eax,%edi
// call _Z6invokei
}
简单明了,pa是一个指向a的指针,ra是一个a的引用,可以看到编译器对pa和ra的的定义以及参数传递做的工作几乎是
一模一样,它们都在栈里有自己的空间且都存了一个a的地址,因此可以十分肯定的说引用是用指针实现的。
引用是对指针的一个语言级别的封装,其出现的意义大概是为了提升程序的可读性,通常都是用来进行参数传递。
关于引用的好处和使用技巧,有待进一步学习。//TODO
类(成员函数,构造函数)
贴代码之前,有必要回顾一下标号这个概念,在汇编语言里,每条指令的前面都可以拥有一个标号,以代表和指示该指令
地址的汇编地址,因为毕竟由我们自己来计算和跟踪每条指令所在的汇编地址是极其困难的。
在汇编翻译成机器码的过程中,这些标号会被转换成标号所在行的具体偏移地址,多数情况下用来标记指令块入口地址,
是进行所谓函数的跳转。忘记的同学可以先行度娘。
接下来的代码,会在每个函数后的注释中标出该函数编译后的标号名。
int invoke(int a) { // _Z6invokei
return ++a;
}
class Animal {
public:
int age;
int weight;
Animal(): age(0), weight(0.0) {} // _ZN6AnimalC2Ev
void run() { } // _ZN6Animal3runEv
};
class Human {
public:
Human() {} // _ZN5HumanC2Ev
};
int main(int argc, char **argv) {
Animal cat; // leaq -16(%rbp), %rax
// movq %rax, %rdi
// call _ZN6AnimalC1Ev
cat.age = 5; // movl $5, -16(%rbp)
cat.weight = 2; // movl $2, -12(%rbp)
cat.run(); // leaq -16(%rbp), %rax
// movq %rax, %rdi
// call _ZN6Animal3runEv
}
相比上一个例子,这波代码里,增加了一个Animal类和一个Human类。
皮卡丘穿皮裤
- 粉丝: 187
- 资源: 956
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0