什么是最好的"类型重命名"方法?

时间:2016-06-01 20:38:18

标签: c++ typedef user-defined-types preprocessor-directive

如果我想将[(1, 4), (4, 5), (5, 7), (7, 9), (9, 12), (12, 15)]类型重命名为更简单且更自然的std::string,我应该使用这两种方法中的哪一种(基于性能和通常的标准)

我应该将其重命名为预处理指令

string

或者使用类型定义

#define string std::string

什么是性能最好的方法?什么对社区更熟悉和认可?

3 个答案:

答案 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

民间阅读你的代码确切地知道发生了什么。