使用C ++的命名空间{}类似于C#的#region / #endregion

时间:2014-04-08 11:14:03

标签: c++ ide namespaces cross-platform code-generation

我从事在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上使用Microsoft编译器,在Mac上使用clang,在Linux上使用gcc。)

谢谢!

1 个答案:

答案 0 :(得分:2)

对你的问题的简短回答是“不”。遵循长答案:

  

这是否会在已编译的二进制文件中产生任何开销?

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

此:

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

分别成为符号_Z10identifierv_ZN13longnamespace10identifierv。如果你有巨大的项目,数十万符号,它可能会影响(尽管稍微)你的链接时间和动态链接(加载)时间。

  

这样做会对性能产生负面影响或影响最终结果   (二进制)呢?

是的,至少在加载时间方面。但不是很多。还有 解决方案来缓解它(google为“prelink”和“prebinding”)。