类型的using和using=之间的区别
Difference between using and using = for types?
考虑以下两个using
语句:
using ::space1::space2::MyType;
using MyType = ::space1::space2::MyType;
似乎在using
之后,这两种方式都允许我们直接使用MyType
(没有任何限定符)。
那么,以上两者之间有什么区别呢?
如注释中所述,在第一种情况下,您实际上是将名称从命名空间导出到包含using
声明的命名空间,而在第二种情况中,您在包含指向该特定名称及其周围命名空间的using
声明的命名空间中定义了一个别名。
例如,使用第二个表达式,您可以定义如下别名:
using Foo = Bar<MyClass>;
template <class C>
using Foo = Bar<C, MyClass>;
虽然第一个using
表达式不能,但它只是让名称在与包含它们的空间不同的空间中可用。
有关使用指令、使用声明和别名(类型和模板)的更多详细信息,请参阅此处。
第一个允许您通过其非限定名称来引用变量/类型。
第二个在封闭命名空间中声明了一个新的类型名称。
除了skypjack的好答案之外,对于记录,在类定义中使用statemetn还有另一个区别。
在类定义中,using声明应引入基类的一个成员,而类型别名仍然是类型别名:
namespace space1 { namespace space2 { class MyType {}; } }
struct s1 {
using ::space1::space2::MyType; // error
MyType b;
};
struct s2 {
using MyType = ::space1::space2::MyType; // perfectly valid
MyType a;
};
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- C++ - "!pointer"和"pointer == nullptr"的区别?
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- "using namespace std;"在C++的作用是什么?
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- C++中"typedef"、"using"、"namespace"和"using namespace"有什么区别?
- C++ "using tcp=x"到"namespace tcp=x"有什么区别
- 附加包含目录和其他 #using 目录有什么区别?
- 类型的using和using=之间的区别
- 'using'和'using namespace'的区别
- "using"命名空间和声明命名空间有什么区别?
- typedef和using之间有什么区别?
- "using namespace std"和"namespace std"的区别?