liuqinh2s' blog

Do something cool!


  • 首页

  • 关于

  • 标签

  • 归档

  • 编程笔记

  • 新闻

  • 收藏

  • 思考

  • 前端面试

  • 力扣

  • 计算机科学

  • 量化交易

  • 英语

  • 导航

  • 阅读

  • 搜索

Inside the C++ Object Model 系列笔记 二 -- The Semantics of constructors

发表于 2017-10-20 | 更新于: 2025-08-19
字数统计: 3,476

这一章详细的讨论了 constructor 如何工作,讨论构造一个对象的过程以及构造一个对象给程序带来的影响。

区分 trivial 和 notrivial

  1. 只有编译器需要的时候(为什么会需要?后面讲的很清楚),合成操作才是 nontrivial 的, 这样的构造函数才会被真正的合成出来;
  2. 如果编译器不需要,而程序员又没有提供,这时的默认构造函数就是 trivial 的。虽然它在概念上存在,但是编译器实际上根本不会去合成出来,因为他不做任何没有意义的事情,所以当然可以忽略它不去合成。trivial 的函数只存在于概念上,实际上不存在这个函数。
阅读全文 »

Inside the C++ Object Model 系列笔记 一 -- Object Lessons

发表于 2017-10-19 | 更新于: 2025-08-19
字数统计: 2,198

多态:统一的接口,不同的实现

C++多态(polymorphism) 表示“以一个 public base class 的指针(或者 reference),寻址出一个 derived class object”

Layout Costs for Adding Encapsulation(封装)

意思是:为了添加封装所需要付出的内存布局花销

第一章 Object Lessons 介绍了 C++如何在背后实现一个对象,内存中的布局以及空间上的关系。

在计算机的原理中,要实现某个机制,我们总能找到很多种实现方式(对比着学习,多思考每种实现方法的利弊),C++的类的实现也不例外,让我们对比以下三种实现方式:

阅读全文 »

值传递和引用传递

发表于 2017-03-29 | 更新于: 2025-08-19
字数统计: 477

Java 没有引用传递,本质上都是值传递,只不过传递的值可以是指针(Java 没有指针,所以你也可以理解为对象,其实本质上还是指针)。

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Solution {

private void getString(String text){
text = "hello";
}

public static void main(String[] args) {
Solution solution = new Solution();
String text = "world";
solution.getString(text);
System.out.println(text);
}
}
阅读全文 »

常量池

发表于 2017-03-28 | 更新于: 2025-08-19
字数统计: 416

字符串由 char 数组实现,字符串以\0结尾,\0是 ASCII 的第一个字符,用 bit 表示也就是:0000 0000,这可以方便我们找到字符串的结尾。

ASCII 字符由一个字节表示,实际上第一版的 ASCII 字符只用到了 7 个 bit,128 个字符,扩展版的 ASCII 使用了 8 个 bit。

1
2
char str[11];
strcpy(str, "0123456789\0");

为了节省内存,C/C++把常量字符串放到常量池中,当几个指针被赋值了相同的字符串常量时,实际上它们会指向相同的内存地址。但用常量字符串初始化数组,情况却不同。

阅读全文 »

数组和指针的区别

发表于 2017-03-27 | 更新于: 2025-08-19
字数统计: 254

数组和指针的区别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int GetSize(int data[]){
return sizeof(data);
}

int _tmain(int argc, _TCHAR* argv[]){
int data1[] = {1, 2, 3, 4, 5};
int size1 = sizeof(data1);

int* data2 = data1;
int size2 = sizeof(data2);

int size3 = GetSize(data1);

printf("%d, %d, %d\n", size1, size2, size3);
}

答案是输出:20, 4, 4

阅读全文 »
1…202122
liuqinh2s

liuqinh2s

106 日志
44 标签
RSS
GitHub Twitter
Links
  • liam
  • jiyanggg
  • 曾小乱 – 在描绘他的生活倒影
© 2025 liuqinh2s | Site words total count: 118.3k
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4