相关疑难解决方法(0)

在C++ 11中'typedef'和'using'有什么区别?

我知道在C++ 11中我们现在可以using用来写类型别名,比如typedefs:

typedef int MyInt;
Run Code Online (Sandbox Code Playgroud)

从我的理解,相当于:

using MyInt = int;
Run Code Online (Sandbox Code Playgroud)

这种新语法来自于努力表达" template typedef":

template< class T > using MyType = AnotherType< T, MyAllocatorType >;
Run Code Online (Sandbox Code Playgroud)

但是,对于前两个非模板示例,标准中是否还有其他细微差别?例如,typedefs以"弱"方式进行别名.也就是说,它不会创建新类型,而只会创建新名称(这些名称之间隐含的转换).

它是否与using生成新类型相同或是否生成新类型?有什么不同吗?

c++ typedef using-declaration c++11

833
推荐指数
8
解决办法
25万
查看次数

C++中的类型和名称有什么区别?

我正在阅读这个Stack Overflow问题,我在该问题的代码中添加了一个构造函数,如下所示,

class Foo {
    struct Bar { 
        int i; 
        Bar(int a = 5) :i(a) {}; 
    };

  public:
    Bar Baz() { return Bar(); }
};

int main() {
    Foo f;
    // Foo::Bar b = f.Baz();  // error
    auto b = f.Baz();         // ok
    std::cout <<"b.i="<< b.i<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码输出b.i=5.在那个问题中,它得出结论,私有的名称是不可访问的,但类型是.那么一般来说,类型和名称之间的区别是什么?

并说我有两个特定的场景.

  1. 以下两个声明之间的区别是什么?为什么我能得到的输出b.i=5auto b = f.Baz();

    Foo::Bar b = f.Baz();
    auto b = f.Baz();
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果我typedef Bar B;在公共部分添加,Foo以下有什么区别?

     Foo::Bar b …
    Run Code Online (Sandbox Code Playgroud)

c++ types c++11

22
推荐指数
2
解决办法
1106
查看次数

标签 统计

c++ ×2

c++11 ×2

typedef ×1

types ×1

using-declaration ×1