在各种权威资料中,我看到了使用命名空间的各种方法。 C ++标准不注重正确使用命名空间。
假设我们有以下代码:
示例。h
weight <- c(rep(0.3, 5), rep(1.2, 10), rep(2.5, 10), rep(0.9, 5)) # 30 observations
a <- rbinom(30, 1, 0.5)
b <- rbinom(30, 1, 0.7)
c <- rbinom(30, 1, 0.6)
d <- rbinom(30, 1, 0.5)
e <- rnorm(30, mean =3)
level <- c(rep("low", 10), rep("medium", 5), rep("high", 15))
outcome <- rnorm(30, mean =10, sd =2)
data <- data.frame(weight, a, b, c, d, e, level = as.factor(level), outcome)
library(party)
res <- cforest(outcome ~. , data = data[,-1], weights = data$weight)
varimp(res)
Warning message:
In varimp(res) :
‘varimp’ with non-unity weights might give misleading results
这是两种实现方式:
example1.cpp
namespace Example {
class MyClass
{
public:
MyClass();
}
}
example2.cpp
#include "example.h"
using namespace Example;
MyClass::MyClass();
这两个实现在gcc中编译时都不会发出警告,因此,这纯粹是代码纯净或美观的问题。但是无论如何,这两种方法的优缺点是什么?
答案 0 :(得分:1)
两个示例不相同:
第一个(using namespace Example;
)将使编译器看到当前名称空间中所有已使用的名称空间。 (意味着您无需指定名称空间,除非与其他名称空间存在歧义)
第二个(namespace Example {...}
)将为名称空间添加符号和代码。但是从名称空间外部来看,它不会像在当前名称空间中那样被看到。
using
。 例如:
//consider the following namespace
Namespace A
{
void f()
{
}
}
在main
中,您有两个选择:
使用命名空间进行呼叫
int main()
{
A::f();
...
}
或添加using
并在没有名称空间的情况下调用。
using namespace A;
int main()
{
f();
...
}
但是您不能将main添加到命名空间中,因为编译器不会找到它:
namespace A {
int main()
{
f();
...
}
}
将导致错误:
对“ main”的未定义引用