gpt4 book ai didi

c++ - 命名空间是否使 C++ 中的原型(prototype)制作方法过时了?

转载 作者:搜寻专家 更新时间:2023-10-31 00:44:21 26 4
gpt4 key购买 nike

我正在从 C 迁移到 C++,我注意到的第一件事是命名空间内部原型(prototype)设计的冗余。我正在尝试利用命名空间的功能来清楚地标记我的添加/修改。

namespace ns {
void sayHello (void); //<-- NOT REQUIRED, BUT IS THERE ANY PURPOSE?
void sayHello (void) {
std::cout << "Hello world!";
return;
}
}

int main(int argc, char *argv[]) {
ns::sayHello();
}

以前,在 C 中,拥有原型(prototype)是一个很好的措施,这样您就不需要在源代码中的 main()“之上”编写您的函数。在我看来,命名空间必须在使用之前定义,因此,任何嵌套函数也将在使用之前编写。

我刚刚开始使用 C++,我想从正确的开始。我一直在阅读互联网上的几个教程,但他们并没有真正提到这个话题。我知道这很“简单”,但请不要给我反对票和翻转评论。如果有人能够,我将不胜感激更深入地讨论这是否已过时,和/或这可能最终会影响新的 C++ 开发人员的场景。

最佳答案

不一定。声明和定义仍然是不同的概念。另请注意,命名空间可以跨越多个文件,并且定义不需要位于命名空间中。

//test.h
namespace test
{
void foo();
//no implementation in header
}

//main.cpp
int main()
{
test::foo();
return 0;
}

//test.cpp
namespace test
{
void foo() { };
//definition here
//without the definition, we'd get a link error
}

在 C++ 中分离实现是出于以下原因,例如保密代码、加快编译(更改 header 中的定义将需要重新编译所有包含的文件)、隐藏实现细节或更清晰的结构。

关于c++ - 命名空间是否使 C++ 中的原型(prototype)制作方法过时了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8947226/

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