有理由不使用最新的 C++ 标准吗?
Is there a reason not to use the newest C++ standard?
我看到 IDE 中的默认标准通常不是最新发布的标准,甚至不是 IDE 中的最新标准。
例如 JetBrains 的 Clion 有 C++20 和 C++17,但默认选项是 C++14。
有没有理由不使用最新发布的标准?
一般来说,如果可以的话,请使用最新的标准。
但是,出于某些原因,您可能会在某些情况下选择使用较旧的版本。
您的代码使用的功能在较新的标准中改变了行为或已被彻底删除。如果您没有时间更新您的代码,为旧标准编译是合理的。
您的工具链可能无法正确实施新标准。可能存在迫使您坚持使用旧版本的已知错误。
您需要在多个平台上支持多个编译器,并非所有组合都支持新标准。
您需要与旧编译器为旧标准构建的代码二进制兼容,并且您没有重新编译它的源代码。在那种情况下,您可能被迫使用相同的旧编译器和语言标准来确保 ABI 兼容性。
公司内部政策可能出于任意原因强制要求使用特定版本。
认证要求可能要求使用特定的编译器和语言版本。在高度监管的行业中经常发生,例如医疗。
您的团队对新功能的熟悉程度可能较低,因此使用它们可能会增加出现错误的风险。
等等(顺便说一句,我在现实生活中看到了以上所有情况)..
我看到 IDE 中的默认标准通常不是最新发布的标准,甚至不是 IDE 中的最新标准。 例如 JetBrains 的 Clion 有 C++20 和 C++17,但默认选项是 C++14。
有没有理由不使用最新发布的标准?
一般来说,如果可以的话,请使用最新的标准。
但是,出于某些原因,您可能会在某些情况下选择使用较旧的版本。
您的代码使用的功能在较新的标准中改变了行为或已被彻底删除。如果您没有时间更新您的代码,为旧标准编译是合理的。
您的工具链可能无法正确实施新标准。可能存在迫使您坚持使用旧版本的已知错误。
您需要在多个平台上支持多个编译器,并非所有组合都支持新标准。
您需要与旧编译器为旧标准构建的代码二进制兼容,并且您没有重新编译它的源代码。在那种情况下,您可能被迫使用相同的旧编译器和语言标准来确保 ABI 兼容性。
公司内部政策可能出于任意原因强制要求使用特定版本。
认证要求可能要求使用特定的编译器和语言版本。在高度监管的行业中经常发生,例如医疗。
您的团队对新功能的熟悉程度可能较低,因此使用它们可能会增加出现错误的风险。
等等(顺便说一句,我在现实生活中看到了以上所有情况)..