为什么宏的行为不同而不使用命名空间std和使用命名空间std?

时间:2016-11-17 09:19:43

标签: c++

在下面的代码中 宏1 总是很好

但是,如果没有写入语句1, 宏2 无法正常工作......为什么会发生这种情况?

#include<iostream>
#include<conio.h>
//using namespace std;      //--statement 1
#define l std::cout<<       //--macro 1
#define nl std::cout<<endl; //--macro 2
int main(){
      l "testing";  
      nl  // this is not working if i dont use statement 1 
      l "a new line";
getch();
return 0;
}

语句1 未写入时 宏2 产生错误,指出&# 39; [错误] endl未在此范围内声明&#39;

如果cout<<std::cout<<的简短版本,则不应发生此错误...我无法理解为什么会发生这种情况......

1 个答案:

答案 0 :(得分:0)

这不是你的MACRO的问题。

endl对象也属于std命名空间,因此要么使用

std::cout << std::endl;

using namespace std;

cout << endl;