我有一个当前使用 C++11⁄14 的项目,但它需要 std::filesystem
之类的东西,它仅在 C++17 中可用,因此我目前没有机会使用它.但是,我看到它在我当前的编译器中可用 std::experimental::filesystem
。假设我将来可以添加以下内容,那么使用实验性功能是否是个好主意:
#ifdef CXX17 //if this is C++17
std::filesystem::something ...;
#else
std::experimental::filesystem::something ...;
#endif
我的担忧是:
1. 是否保证所有兼容的编译器都具有相同的实验特性?
2. 实验性功能是否容易发生大的变化而使其不可靠?
也许还有更多值得怀疑的事情。为什么我应该或不应该使用它们?我对一个新项目感到困惑,不知道该决定什么。
原文由 The Quantum Physicist 发布,翻译遵循 CC BY-SA 4.0 许可协议
不,实验性功能是可选的。
是的,C++ 委员会甚至可能决定放弃某个特性,或者在标准化过程中可能会出现一个缺陷,从而迫使特性发生变化。
一般来说,依赖实验特性并不是一个好主意。实验特征正是这个词所说的(即实验)。