关键字 using 的功能是什么?

What is the functionality of the keyword using?

我是 C++ 的新手,正在尝试了解关键字 "using" 的功能。我只是不明白什么时候以及为什么应该使用它。

例如,我有这个代码:

using connection_status_t = bool;

connection_status_t isFileOpenForInput(ifstream& ifs, const string& filename) {
    ifs.open(filename);
    return ifs.is_open();
}

对于这个具体的例子,为什么我不能做类似的事情:

bool connection_status_t;

bool isFileOpenForInput(ifstream& ifs, const string& filename) {
    ifs.open(filename);
    return ifs.is_open();
}
上面示例中的

connection_status_t 是一个 类型别名 -- 它是类型 bool.

的另一个名称

why could I not just do something like:

你给出的第二个例子不是一回事,因为 connection_status_t 实际上是那个代码中的一个变量。所以你 可以 那样做,但这意味着不同的东西。如果你省略 bool connection_status_t; 那么 这将是一个可比较的例子。

为了达到您的问题的要点,类型别名用于通过赋予人类理解的内置类型语义来提高代码的可读性。 connection_status_t 告诉我 return 值将指示连接状态,只需查看代码即可。 bool 没有给我任何关于 return 值可能表示什么的线索,它只告诉我 return 值的域。

类型别名也可用于确保在代码库中使用相同的类型,稍后可以将实际类型换成兼容类型。例如,可以有 using id_set_t = std::set<std::string>;,然后将其更改为 std::unordered_set<std::string>。这只需要改变类型别名;使用 id_set_t 的所有内容都会突然开始使用新类型,而无需查找该类型的所有用法。

正常使用即可。

如果您想稍后切换类型,建议使用。在您的示例中,您稍后可能想要切换 bool 使用枚举:

enum connection_status_t
{
failed = 0,
success = 1,
no_result = 2
}

简单来说:using是一种别名系统。您也可以将它用于命名空间中的 classes/types/structs 等缩写内容:

using ::namespace::class

这样,您就不必编写整个命名空间。