Understanding C++11: Smart Pointer

Android

程序的内存按类型来划分,分为三种:

  • 静态内存(Static Memory)保存局部static对象、类static数据成员、定义在任何函数之外的变量
  • 栈内存(Stack Memory)保存定义在函数内的非static对象
  • 堆(Heap Memory)用来存储动态分配的对象
[ Read More » ]

读《C++ Primer》之定义、声明、引用

Android

变量提供了程序可以操作的有名字的存储区。每一个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储于该内存中的值的取值范围以及可应用在变量上的操作集。

我弄不懂,这算不算是强类型(Strong Typing)与弱类型(Weak Typing)语言的区别之一。

在使用变量之前,变量必须已经被定义或声明。但是变量必须且仅能定义一次,定义时,除了可以为变量分配存储空间,还可以指定初始值。

C++ 中,声明(declaration)用于向程序表明变量的类型和名字。通过使用 extern 关键字,声明变量名而不定义它,不分配存储空间。事实上,它只是说明变量定义在程序的其他地方。

[ Read More » ]

读《C++ Primer》之零长度数组

Android

在书的4.3.1章节“创建动态数组”中,对比数组变量和动态数组时,提到:

C++虽然不允许定义长度为0的数组变量,但明确指出,调用new动态创建长度为0的数组是合法的。

前半句话引起了我的好奇,根据使用 Java 的经验,我知道这是可行的。所以,我验证一下。

int main() {
    char a[0];
    return sizeof(a);
}
[ Read More » ]

读《C++ Primer》之返回值与缓冲区

Android

在 Unix 系统中,通过echo $?,获取 main 函数的返回值。习题1.2,在 main 函数中,返回-1。通过上述方法查看,发现结果是255。这是为什么?

从 Wikipedia 的 Exti Status词条,可以看到如下说明:

SUS specifies that the low-order 8 bits of the status value contain the exit status;[4] this can be retrieved using the WEXITSTATUS macro in wait.h.[5] As such, on POSIX-compatible exit statuses are restricted to values 0-255, the range of an unsigned 8-bit integer.

[ Read More » ]