c++在什么时候需要在头文件下输入 use std::cout use什么什么等命令?
4个回答
展开全部
1.关键字拼写错误,是using,不是use。
2.using有两个用法,一种是using指令,如using namespace std;;另外一种是using声明,如using std::cout。
3.在using声明后,使用名称前不必加上命名空间前缀。例如std::cout如果不经过using声明的话,直接使用cout就可能会出现未定义标识符的编译错误,因为编译器认为std::cout和cout是两个不同的名称,std::cout经过声明所以可以被引用,cout没有声明直接引用的话违反了“先声明后引用”的规则。
4.using指令的作用是引入命名空间中所有已经声明的名称,效果上相当于对被using的namespace中已经声明的每个名称使用一次using声明,例如using namespace std;相当于using std::cout;和以及其它所有“using std::名称;”这样形式的声明的总和,只要在这条using namespace之前已经在头文件或其它地方声明过,像cout、cin、max等名称,只要包含了对应的头文件(内有std::cout、std::cin、std::max等声明),就可以直接引用,无需在前面加上std::。
4.using声明和指令引入的名称作用域从using处开始,结束处则是和using本身所在的位置相关的,在函数内就是到函数结束,在语句块内就是语句结束,在全局则是编译单元(源文件)结束。要注意头文件会被编译每个编译单元时各自包含。在源文件的全局范围内使用using,只会影响这个源文件本身;在头文件中的全局范围内使用,则会影响到所有包含这个头文件的源文件。所以头文件内使用的using(尤其是using指令)更容易造成命名空间污染,可能会造成重定义等莫名其妙的错误。
5.结论是尽可能不在头文件的全局范围内使用using,除非确保这个头文件只被一个源文件包含,但这样头文件就没什么必要存在了(直接把代码写在源文件里更方便)。
6.在源文件内可以使用using,但最好不要声明和被using的的名称重名的实体,这样会造成歧义(命名空间污染的一个极端情况),反而需要明确std::之类的命名空间前缀,白using了;要么就干脆不要使用using。例如http://zhidao.baidu.com/question/178309120.html,using namespace std;后还定义了函数模板swap,结果模板解析时产生编译错误。这个时候需要用::swap指定自定义的全局命名空间中的swap,用std::swap指定标准库中的swap,反而不如不using来的方便。
====
[原创回答团]
2.using有两个用法,一种是using指令,如using namespace std;;另外一种是using声明,如using std::cout。
3.在using声明后,使用名称前不必加上命名空间前缀。例如std::cout如果不经过using声明的话,直接使用cout就可能会出现未定义标识符的编译错误,因为编译器认为std::cout和cout是两个不同的名称,std::cout经过声明所以可以被引用,cout没有声明直接引用的话违反了“先声明后引用”的规则。
4.using指令的作用是引入命名空间中所有已经声明的名称,效果上相当于对被using的namespace中已经声明的每个名称使用一次using声明,例如using namespace std;相当于using std::cout;和以及其它所有“using std::名称;”这样形式的声明的总和,只要在这条using namespace之前已经在头文件或其它地方声明过,像cout、cin、max等名称,只要包含了对应的头文件(内有std::cout、std::cin、std::max等声明),就可以直接引用,无需在前面加上std::。
4.using声明和指令引入的名称作用域从using处开始,结束处则是和using本身所在的位置相关的,在函数内就是到函数结束,在语句块内就是语句结束,在全局则是编译单元(源文件)结束。要注意头文件会被编译每个编译单元时各自包含。在源文件的全局范围内使用using,只会影响这个源文件本身;在头文件中的全局范围内使用,则会影响到所有包含这个头文件的源文件。所以头文件内使用的using(尤其是using指令)更容易造成命名空间污染,可能会造成重定义等莫名其妙的错误。
5.结论是尽可能不在头文件的全局范围内使用using,除非确保这个头文件只被一个源文件包含,但这样头文件就没什么必要存在了(直接把代码写在源文件里更方便)。
6.在源文件内可以使用using,但最好不要声明和被using的的名称重名的实体,这样会造成歧义(命名空间污染的一个极端情况),反而需要明确std::之类的命名空间前缀,白using了;要么就干脆不要使用using。例如http://zhidao.baidu.com/question/178309120.html,using namespace std;后还定义了函数模板swap,结果模板解析时产生编译错误。这个时候需要用::swap指定自定义的全局命名空间中的swap,用std::swap指定标准库中的swap,反而不如不using来的方便。
====
[原创回答团]
参考资料: 原创
展开全部
头文件最好不要用use,这样有可能会让主程序文件的名称空间混乱的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<iostream>下吧
其实你直接在一开始加上:use namespace std;就可以不用这么写了,这是利用标准命名空间的意思
std::cout 是表示这个命名空间里的一个对象
其实你直接在一开始加上:use namespace std;就可以不用这么写了,这是利用标准命名空间的意思
std::cout 是表示这个命名空间里的一个对象
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你不声明std这个命名空间 还要使用cout那就必须加上std::
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询