gpt4 book ai didi

c++ - 使用 C+ +'s namespace{} sort-of like C#' s #region/#endregion

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:04 27 4
gpt4 key购买 nike

我从事一个在 Windows、Mac 和 Linux 上运行的 C++ 项目。因此,一天在 Visual Studio 中处理同一部分代码、第二天在 Xcode 中、下一天在 Qt Creator 中处理代码的同一部分并不少见。

最近我开始使用 namespace{} 关键字,就像在 C# 中使用#region/#endregion 一样。例如:

// MyFile.cpp

namespace MyNamespace
{
// lots of code related to one class
}

namespace MyNamespace
{
// lots of code related to another class
}

namespace MyNamespace
{
// lots of code related to yet another class
}

虽然这不允许我按说法命名区域,但我仍然发现能够折叠大块代码非常有帮助。我知道存在特定于 IDE 的解决方案,例如 #pragma region/#pragma endregion 但我无法找到与 C++ IDE 无关的方法。另外,我知道这些大块可以放在它们自己的文件中,但出于这个问题的目的,请假设这不是一个选项。

我的问题是:这是否会在编译的二进制文件中产生任何开销?这样做会对性能产生负面影响或完全影响最终结果(二进制)吗?

(注意:我们在 Windows 上使用微软的编译器,在 Mac 上使用 clang,在 Linux 上使用 gcc。)

谢谢!

最佳答案

对您的问题的简短回答是“否”。按照长答案:

does this create any overhead in the compiled binaries?

没有。假设您已经在使用 namespace ,那么影响绝对为零。如果您没有以前使用命名空间,那么对要链接的损坏标识符的大小影响很小。

这个:

void identifier() {}        
namespace longnamespace { void identifier() {} }

分别成为符号_Z10identifierv_ZN13longnamespace10identifierv。如果您有一个庞大的项目,包含数十万符号,它可能会影响(尽管是轻微的)您的链接时间和动态链接(加载)时间。

Can doing this impact performance negatively or impact the end result (binary) at all?

是的,至少在加载时间方面是这样。但不是很多。并且有解决方案来缓解它(谷歌搜索“prelink”和“prebinding”)。

关于c++ - 使用 C+ +'s namespace{} sort-of like C#' s #region/#endregion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22935266/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com