【问题标题】:Could someone explain the meaning of "using"?有人可以解释“使用”的含义吗?
【发布时间】:2015-03-30 14:00:47
【问题描述】:

我不明白下面在 C++ 中使用的用法。 与 typedef 有什么区别? 有人可以举个例子来解释一下吗?

template<typename DataType>
class DataWriter
{
using ObjType = std::function<void(DataType)>
// ...
}

【问题讨论】:

  • 是C++11带来的语法糖。见this post
  • 在这种特殊情况下,它是语法糖。除了 typedef 没有的功能之外,它还有其他很棒的用途。

标签: c++ using


【解决方案1】:

在您的示例中与typedef 没有区别。

它们是相同的:

typedef int a;
using a = int;

一般来说,它更通用,这就是它被引入的原因:

  • 可以模板化。

    template<class X> using smart = std::unique_ptr<X>;
    
  • 可用于将符号导入当前作用域。

    struct Derived : Base {
        using Base::Fun;
    };
    

【讨论】:

  • 如果出现关键字using,我不认为提问者想要枚举所有场景。他特别谈到了别名声明。
  • @Columbo:感谢您的编辑。而且我认为 OP 的关注点并没有那么狭窄,即使那是他给出的例子。
  • 谢谢大家。首先我想知道这个“使用”的用法,其次我也想知道C++ 11引入这个语言糖的原因,我想是有一些原因的。
【解决方案2】:

没有区别。 [dcl.typedef]/2:

typedef-name 也可以由 alias-declaration 引入。这 using 关键字后面的标识符变成 typedef-name [..]。 它具有相同的语义,就好像它是由 typedef 说明符。

using ObjType = std::function<void(DataType)>;

相当于

typedef std::function<void(DataType)> ObjType;

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2010-11-27
    相关资源
    最近更新 更多