关键字使用的功能是什么?

What is the functionality of the keyword using?

本文关键字:是什么 功能 关键字      更新时间:2023-10-16

我对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的另一个名称。

为什么我不能做这样的事情:

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

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

类型别名还可用于确保在代码库中使用相同的类型,其中实际类型稍后可以换成兼容的类型。例如,可以有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 ::namespace::class

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