【问题标题】:What is the functionality of the keyword using? [duplicate]关键字使用的功能是什么? [复制]
【发布时间】:2019-10-12 18:22:04
【问题描述】:

我对 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();
}

【问题讨论】:

    标签: c++ computer-science using


    【解决方案1】:

    上面例子中的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 的所有内容都会突然开始使用新类型,而无需查找该类型的所有用法。

    【讨论】:

      【解决方案2】:

      你可以正常使用。

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

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

      简单地说:using 是一种别名系统。您也可以将它用于命名空间中的类/类型/结构等以缩写某些内容:

      using ::namespace::class
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-02
        • 2017-10-11
        • 2010-11-25
        • 1970-01-01
        • 2023-01-14
        • 1970-01-01
        • 2012-04-04
        相关资源
        最近更新 更多