我已经告诉别人,编写using namespace std;代码是错误的,我应该用std::cout和std::cin直接代替.
为什么被using namespace std;认为是不好的做法?是低效还是冒着声明模糊变量(与名称std空间中的函数具有相同名称的变量)的风险?它会影响性能吗?
我发现当v.foo从模板类型(T& v)的变量访问非模板属性()时,如果存在相同名称的模板函数(),可以欺骗C++认为它是成员模板template class <T> void foo().如何从C++规范中解释这一点?考虑这个简单的程序:
#include <cassert>
/** Determine whether the 'foo' attribute of an object is negative. */
template <class T>
bool foo_negative(T& v)
{
return v.foo < 0;
}
struct X
{
int foo;
};
int main()
{
X x;
x.foo = 5;
assert(!foo_negative(x));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我们有一个模板函数foo_negative,它接受任何类型的对象并确定其foo属性是否为负数.该main函数foo_negative用[T = X] 实例化.该程序编译并运行,没有任何输出.
现在,将此函数添加到程序的顶部:
template <class T>
void foo()
{
}
Run Code Online (Sandbox Code Playgroud)
使用G ++ 4.6.3进行编译会导致此编译器错误:
funcs.cpp: In function …Run Code Online (Sandbox Code Playgroud)