cpp17的 Inline namespaces
时间: 2023-05-31 13:03:46 浏览: 71
C++17引入了内联命名空间(Inline namespaces)这一新特性。内联命名空间是一种特殊的命名空间,它的作用是将一个命名空间嵌套在另一个命名空间内部,从而形成一种内联的结构。
内联命名空间的语法格式如下:
```
namespace A::B {
// ...
}
```
其中,A是外层命名空间,B是内层命名空间。在使用内联命名空间时,可以省略外层命名空间的名称,直接使用内层命名空间的名称,如:
```
using namespace B;
```
这样就可以直接使用B命名空间内的所有成员。
内联命名空间的主要作用是提供一种更灵活的命名空间组织方式。在库开发中,可以将库的不同版本放置在不同的内联命名空间中,从而避免命名冲突的问题。同时,内联命名空间还可以用于实现一些特殊的功能,例如在不同的编译器中使用不同的实现方式等。
相关问题
Nested namespace Definitions和Inline namespaces的区别
Nested namespace Definitions 和 Inline namespaces 是 C++ 中的两种不同的命名空间定义方式。
Nested namespace Definitions 是指在一个命名空间中定义另一个命名空间,如下所示:
```c++
namespace A {
namespace B {
// ...
}
}
```
这种方式允许我们在一个命名空间中定义多个子命名空间,使得命名空间的结构更加清晰。
Inline namespaces 则是 C++11 引入的新特性,允许我们在定义命名空间的同时,将其中的符号直接嵌套到外层命名空间中。如下所示:
```c++
namespace A {
inline namespace B {
// ...
}
}
```
这种方式相当于将命名空间 B 中的符号直接“内联”到命名空间 A 中,使得我们可以省略掉命名空间 B 的前缀,直接使用命名空间 A 中的符号。这在某些情况下可以使得代码的书写更加简洁。
需要注意的是,如果我们在一个 inline namespace 中定义了与外层命名空间中相同名字的符号,那么这些符号将会隐藏掉外层命名空间中的符号。这可能会导致一些意想不到的问题,因此需要谨慎使用。
cpp17的所有新特性
1. Structured Bindings:允许将一个结构体或者数组分解为多个变量。
2. if / switch with Initializer:允许在if和switch语句中使用初始化表达式。
3. constexpr if:允许在模板和函数中使用if语句来进行编译时的条件判断。
4. Nested namespace Definitions:允许在命名空间中定义嵌套的命名空间。
5. Inline Variables:允许在头文件中定义内联变量。
6. Template Argument Deduction for Class Templates:允许使用类模板参数推导来进行模板实例化。
7. Class Template Argument Deduction Guides:允许在类模板中添加参数推导指南,从而使编译器能够自动推导类模板参数。
8. Fold Expressions:允许使用折叠表达式来处理可变参数模板。
9. std::variant:允许使用variant类型来存储多个不同类型的值。
10. std::optional:允许使用optional类型来表示一个可选值。
11. std::any:允许使用any类型来存储任意类型的值。
12. std::string_view:允许使用string_view类型来表示一个字符串的视图。
13. std::filesystem:允许使用filesystem库来处理文件系统的操作。
14. std::invoke:允许使用invoke函数来调用任意可调用对象。
15. std::byte:允许使用byte类型来表示一个字节。
16. UTF-8 Literals:允许使用UTF-8编码的字符串字面量。
17. Inline namespaces:允许在命名空间中定义内联命名空间。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)