pal*_*m3D 15 c++ typedef using
使用之间有什么区别
typedef Some::Nested::Namespace::TypeName TypeName;
Run Code Online (Sandbox Code Playgroud)
要么
using Some::Nested::Namespace::TypeName;
Run Code Online (Sandbox Code Playgroud)
提供TypeName当地范围的速记?
typedef 给出类型的别名.
typedef Some :: Nested :: Namespace :: TypeName TypeName;
完成后,您Some::Nested::Namespace::TypeName只需TypeName在本地命名空间中说出即可.
using declaration 使类型在当前命名空间中可见.
使用Some :: Nested :: Namespace :: TypeName;
在当前名称空间中导入类型.
在这种情况下,使用上述任一方法,您Some::Nested::Namespace::TypeName只需TypeName在本地命名空间中使用即可引用.
使用只是将声明带入本地范围,而typedef引入了一个typedef-name.它们之间的一个区别是精心设计的类型说明符,例如:
namespace n
{
class foo
{
};
}
typedef n::foo n_foo;
using n::foo;
int main()
{
class foo f1; // ok, declares f1 variable of type n::foo.
class n_foo f2; // error, typedef-name can't be used in elaborated-type-specifier.
}
它们有不同的起源和不同的用途.
typedef来自C:回想一下,声明结构的C语言是:
typedef struct _MyStruct { .... } MyStruct;
Run Code Online (Sandbox Code Playgroud)
它允许您仅为类型引入别名.它可以用于函数的类型,具有笨拙的语法......
typedef void (*Func)(Foo, Bar);
Run Code Online (Sandbox Code Playgroud)
Func现在在哪里指向一个函数的指针,该函数通过副本(分别为类型Foo和Bar)返回两个参数并且不返回任何内容.
using最初有一个不同的含义.它意味着在范围中注入名称.可以注入任何名称(几乎):类型,函数,变量(但不是枚举值......)
使用C++ 11,语法已得到增强,允许模板别名:
template <typename T>
using equiv_map = std::map<T,T>;
Run Code Online (Sandbox Code Playgroud)
这种加电using意味着现在可以在之前的功能之上进行混叠(见下文).
这种C++ 11的改变是语法协调的明确方向.请注意别名的定义现在与变量的定义类似:
<name> = <expression>;
Run Code Online (Sandbox Code Playgroud)
不幸的是,似乎标准保留了这个别名到模板的情况,所以现在都typedef和using共存,每个都有自己的狩猎场.
| 归档时间: |
|
| 查看次数: |
1857 次 |
| 最近记录: |