以下两个源文件之间的可编译性或生成代码(如果有)有何不同之处:
附件A :
namespace std {};
using namespace std;
#include <vector>
#include <string>
<any code here>
图表B :
#include <vector>
#include <string>
using namespace std;
<any code here>
假设两个<any code here>
占位符替换为任何相同的用户代码。
换句话说:如果“using namespace std;”有任何用户可见的区别吗?放在标准#includes
之前(假设如上所述引入名称空间std)?
答案 0 :(得分:5)
尽管可能不太可能,但以下代码可能在您的实现的向量标题中:
namespace __AA
{
class vector {};
}
namespace std
{
// actual std::vector implementation here
}
namespace __BB
{
using namespace __AA;
vector x;
}
现在有了图表A ,你就会产生歧义。
答案 1 :(得分:1)
在任何实际的标准库实现中都没有任何区别,因为using指令对命名空间std
内的定义没有影响(因为std
已经是当前范围)。
如果任何标准库实现对产生负面影响,我会认为这是严重的实施质量缺陷。