C++ 大小写混合的命名空间名称冲突
C++名称空间可以防止冲突,但是如果名称空间本身的名称发生冲突怎么办?例如:C++ 大小写混合的命名空间名称冲突,c++,namespaces,C++,Namespaces,C++名称空间可以防止冲突,但是如果名称空间本身的名称发生冲突怎么办?例如: #include <cstdlib> namespace atoi { int foo() {return 42;} } #包括 名称空间原子{ int foo(){return 42;} } 问题:我能否通过名称空间Atoi可靠地避免冲突?也就是说,C++保护我是否使用混合的名称空间名称,比如 Atoi < /代码>?还是混合的名称空间名称,如 Atoi ,可能会被未来的C++标准、技术规范
#include <cstdlib>
namespace atoi {
int foo() {return 42;}
}
#包括
名称空间原子{
int foo(){return 42;}
}
问题:我能否通过名称空间Atoi
可靠地避免冲突?也就是说,C++保护我是否使用混合的名称空间名称,比如<代码> Atoi < /代码>?还是混合的名称空间名称,如<代码> Atoi <代码>,可能会被未来的C++标准、技术规范(TS)、升压库、编译器、工具链等?
当然,对于实用代码,我并不打算使用namespace-atoi
或namespace-atoi
。这些只是为了说明(因为atoi
恰好是C标准库使用的名称)。我真正想要的是名称空间我的
,最好是小写,但如果必要,可以混合使用名称空间我的
。您关于atoi
和atoi
的回答可能会影响我在my
和my
之间的选择。这就是为什么我要问
我注意到Stroustrup更喜欢大小写混合的名称空间名称。我还注意到第节中的例子。C++17标准(草案)的10.3避免使用小写名称空间名称
另请参见观看此视频:。此视频由Titus Winters提供,其中说明了标准委员会保留的权利以及标准库中不应依赖的内容
必须是官方文件。我在视频的描述中找到了它。这就是我们关心的问题:
标准库为其自身保留的权利主要是标准
保留以下权利:
●向命名空间添加新名称性病
●向命名空间中的类型添加新成员函数性病
●向现有函数添加新重载
●向函数和模板添加新的默认参数
●以兼容的方式更改函数的返回类型(void为
任何内容、数字类型等)
●对现有接口进行更改,以使
backwardcompatible,如果这些接口仅用于实例化
类型和调用函数。实施详细信息(项目的主要名称)
类型,则函数的实现细节(可调用)可能不可用
取决于
○例如,我们可能会更改标准的实现细节
functiontemplates,使其成为可调用的函数对象。如果
用户代码只显示可调用的,行为不变
我能否通过命名空间Atoi
可靠地避免冲突
相当可靠。在C标准库中没有该名称的标识符
或是混合的名称空间名称,如Atoi,可能被未来的C++标准、技术规范(TS)、升压库、编译器、工具链等(? 不太可能
编译器扩展应该使用保留标识符 新的标准库(包括TS)标识符添加到std
命名空间(或嵌套在std
中的命名空间)中。Boost应该将其标识符添加到Boost
名称空间中
一个例外是宏,它不存在于名称空间中。Boost命名约定是使用Boost\uu
前缀。新的标准库宏应使用保留标识符
C标准库当然没有名称空间。一个新版本可能会添加一个非保留宏,尽管它应该被添加到一个新的头中,而这个头是预先存在的程序不会包含的
更麻烦的是POSIX标准头,它在全局名称空间中添加了许多标识符,这些标识符不是C标准保留的。它会根据包含的POSIX头进行添加
使用大写字母后跟小写字母,如您的Atoi
建议,可以避免与大多数POSIX保留以及大多数严格遵循全小写或全大写约定(通常用于宏)的标准名称发生冲突
为了尽量减少名称冲突,以下是我的经验法则。有些应该明确遵守,有些只是指导方针:
- 永远不要使用标准保留的标识符,即使是在名称空间内
- 避免使用宏。
- 命名宏时使用一致的前缀
- 仅全局声明一个命名空间,而不声明其他全局标识符。
- 声明该命名空间内的所有其他内容
- 在所有项目中共享相同的全局命名空间。
- 不一定适用于通用的、可重用的库
- 使用子名称空间可以避免项目之间的冲突
- 使用子命名空间可以避免项目中的冲突
- 命名全局标识符(即全局名称空间或宏)时,避免使用POSIX标准保留的名称
my
引入C++的全局名称空间。然而,未来的C标准库(或Boost库等)是否会将混合大小写的My
引入C++的全局名称空间?@Someprogrammerdude标准并不保证atoi
不在全局名称空间中,除了std
。您可以通过对Unicode进行自由调整来避免这个问题<代码>名称空间ảt̉ỏỉ{(Ducks.Runs.)。除了视频链接,你应该引用他在你的答案中所说的内容(至少是与问题相关的重要部分)。这里的答案应该尽可能独立。给我一个小时@πάν