NoS*_*tAl 4 c++ forward-declaration c++20
C++ 标准不允许代码在名称空间中转发声明类std,即使它们不是模板。
我看不出这样做的充分理由,所以我想知道动机是什么?
这可能是一个巨大的编译时间改进。例如,std::mutex这是一个简单的类,但<mutex>标头拖入了大量内容(至少在我的实现中)。
如果有人想知道为什么我要区分模板和非模板,那么这是因为模板实例化可能根据提供的模板参数而存在显着差异,所以我想这可能更难以实现/支持。
例如
std::mutex是一个简单的类
你怎么知道?标准将其描述为一个类,但没有什么可以阻止实现者这样做
namespace std {
using mutex = _Internal_detail::_PthreadMutex;
}
Run Code Online (Sandbox Code Playgroud)
当然,我省略了一些关于何时应该设置此别名的检查(可能非常详细且对专家友好)。但这是一种有效的实现技术!
现在,如果您添加前向声明,您将收到错误,因为别名和类是不同的东西。这使得此类前向声明本质上是不可移植的,因此,它们被认为会产生未定义的行为。
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |