1.头文件管理
一般可将程序分为3部分:
(1)头文件:包含结构声明和使用这些结构的函数的原型。(2)源代码文件:包含与结构有关的函数的代码。(3)源代码文件:包含调用与结构相关的函数的代码。
注意,只要将源代码文件加入到工程中,而不用加入头文件。这是因为#include指令管理头文件。另外,不要使用#include来包含源代码文件,这样将导致多重声明。
头文件常包含的内容有:函数原型;使用#define或const定义的符号常量;结构声明;类声明;模板声明;内联函数。
常用代码片段为:
2.自动变量
作用域为局部,没有链接性。
auto用于默认状态下的自动变量,程序员几乎不使用它。有时候,它被用来向读者澄清代码的含义。例如,可以借助于表明,程序中特意创建了一个自动变量,它将覆盖全局定义。
register是另一种形式的自动变量。如果变量被存储在寄存器中,则没有内存地址,因此不能将地址操作符用于寄存器变量。
3.静态变量
编译器分配固定的内存块来存储所有的静态变量,这些变量在整个程序执行期间一直存在。未被初始化的静态变量的所有位都被设置为0。只能使用常量表达式来初始化静态变量。
一共3种静态变量:1)要想创建链接性为外部的静态持续变量,必须在代码块的外面声明它;2)要创建链接性为内部的静态持续变量,必须在代码块的外面声明它,并使用static限定符;3)要创建没有链接性的静态持续变量,必须在代码块内声明它,并使用static限定符。
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/1.jpg
链接性为内部的变量只能在其所属文件中使用;常规外部变量都具有外部链接性,可在其他文件中使用。对于外部链接性变量,有且只有一个文件包含了该变量的外部定义。其他文件要使用该变量,必须在引用声明中使用关键字extern。
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/2.jpg
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/3.jpg
看下面两个文件中关于静态变量的应用:
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/4.jpg
对于无链接性的静态变量,程序只在启动时进行一次初始化。以后再调用函数时,将不会像自动变量那样再次被初始化。
4.volatile和mutable
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/5.jpg
5.函数和链接性
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/6.jpg
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/7.jpg
6.布局new操作符
通常,编译器使用3块独立的内存:一块用于静态变量(可能再细分),一块用于自动变量,另外一块用于动态存储。常规new操作符负责在堆(heap)中找到一个足以能够满足要求的内存块。new操作符另外一种变体,称为布局(placement) new 操作符,它能指定要使用的位置。
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/8.jpg
下面是一个范例程序:
程序输出:
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/9.jpg
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/10.jpg
程序说明:
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/11.jpg
7.名称空间
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/12.jpg
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/13.jpg
1)using声明和using编译指令
C++有两种机制来简化对名称空间中名称的使用。using声明使特定的标识符可用,using编译指令使整个名称空间可用。
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/14.jpg
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/15.jpg
注:假设名称空间和生命区域定义了相同的名称。如果试图使用using声明将名称空间的名称导入该声明区域,则这两个名称将发生冲突,从而出错。如果使用using编译指令导入,则局部版本将隐藏名称空间版本。所以,一般来说,使用using声明比使用using编译指令更安全。
提倡写法是这样的:
2)名称空间的其他特性
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/16.jpg
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/17.jpg
3)未命名的名称空间=链接性为内部的静态变量
namespace
{
int ice;
int bandycoot;
}
C++标准不赞成在名称空间和全局作用域中使用关键字static,因此,一般提倡下面这样的转换:
4)范例:
文件1
文件2
文件3
5)名称空间及前途
https://p-blog.csdn.net/images/p_blog_csdn_net/xuanya0214/EntryImages/20091001/18.jpg