Zak*_*Zak 2 c++ prototype namespaces
我正在从C迁移到C++,我注意到的第一件事就是命名空间内原型的冗余.我正在尝试利用命名空间的功能来清楚地标记我的添加/修改.
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();
}
Run Code Online (Sandbox Code Playgroud)
以前,在C中,使用原型是一个很好的措施,因此您不需要在源代码中的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
}
Run Code Online (Sandbox Code Playgroud)
在C++中实现分离是出于保密,加快编译速度(更改标题中的定义需要重新编译所有包含文件),隐藏实现细节或更清晰的结构等原因.