如果我想将[(1, 4), (4, 5), (5, 7), (7, 9), (9, 12), (12, 15)]
类型重命名为更简单且更自然的std::string
,我应该使用这两种方法中的哪一种(基于性能和通常的标准)
我应该将其重命名为预处理指令
string
或者使用类型定义
#define string std::string
什么是性能最好的方法?什么对社区更熟悉和认可?
答案 0 :(得分:11)
只需
using std::string;
如果您想要稍微不同的名称,例如
using String = std::string;
避免使用宏,它们不尊重范围,通常是Evil™。
例如,建议的宏
#define string std::string
...如果包含任何标准库标题,则会产生正式的未定义行为,因为它定义了标准库使用的名称。
C ++11§17.6.4.2.2/ 1 [macro.names]:“包含标准库标头的翻译单元不得在任何标准库标头中声明
#define
或#undef
个名称。
答案 1 :(得分:4)
如果您只想不写命名空间
,则应使用using
using std::string;
因为所有这些都是编译时间,所以两者都不会更高效。
对于更复杂的案例,您可以使用其他形式的using
using short_name = complex_name<possibly, with, templates>;
答案 2 :(得分:4)
书写
using std::string;
是最好的方式。这具有将标准c ++库字符串类引入当前名称空间的效果。
但实际上你应该学会阅读包含范围分辨率运算符的代码。写作
std::string
民间阅读你的代码确切地知道发生了什么。