Separate compilation & Namespace

Posted xero10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Separate compilation & Namespace相关的知识,希望对你有一定的参考价值。

data type由一系列值和对这些值的相关操作组成。abstract data type(ADT)是指使用这类data type的程序猿不需要知道其实现相关细节的data type。如果想用class实现ADT,需要将该type如何被使用和如何被定义的细节分开,达到不需要修改使用ADT的程序就能改变class实现方式的程度。应该遵守的法则有:

1. 将所有的成员变量都设为private

2. 将ADT的基本操作设为public或普通函数或friend function或重载的运算符,将这些函数的声明放在一起形成一个interface file(通常是.h文件)

3. 将函数的具体实现隐藏,放到一个implementation文件中(通常是.cpp)文件,通常需要添加include directive


包括程序主要部分(main函数)的文件通常叫做application file或driver file


C++不允许重复定义一个class,即便是内容完全相同,因此同一个头文件不能被包含多次。解决方法是使用以下形式:

#ifndef DTIME_H
#define DTIME_H
<class definition>
#endif

这样一来只有第一次包含头文件时才会生效。通常将.h文件的名字大写并添加“_H”来进行命名



namespace是一系列名字的定义,如class、variable等

std namespace包含了在标准库文件中定义的名字,如添加#include<iostream>时,会将iostream中的定义(如cin, cout)添加到std namespace中。如果不声明使用std namespace的话则程序就不知道std namespace中的名字

代码总是在某个namespace中的,如果不显式声明,则会被放在global namespace中

可以同时使用多个namespace,多个namespace中也可以使用相同的名字,但如果多个namespace中有相同的名字时,需要使用"::"来指出使用哪个namespace中的内容(叫using declaration),不能直接使用using(叫using directive),否则会产生错误

using namespace1::fun;	// "using declaration"
或
namespace1::fun();

在一个block内的开头使用的"using"只作用于这个block

namespace name_of_namespace

	// code

一个compilation unit是指一个file和它所#include的file(如interface file)。每一个compilation unit都有一个unnamed namespace,在unnamed namespace中定义的所有名字都只是对该compilation unit可见,所以在compilation unit之外的其他地方可以重复使用。unnamed namespace中定义的任何名字都可以在compilation unit中的任何位置被不被指明属于哪个namespace地使用


以上是关于Separate compilation & Namespace的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出 Compose Compiler Kotlin Compiler & KCP

R 使用 tidyr::separate 在最后一个空格字符处拆分字符串

call_compile.sql

Android CPU, Compilers, D8 & R8

Android CPU, Compilers, D8 & R8

embeded_2_separate_sync