关于std、cin、cout
std是命名空间我知道,但是std是不是包含在iostream库里面的?
书上说库包含在命名空间里,是什么意思?
cin和cout是标准库里的还是std命名空间的里的?
为什么编程时只导入一个标准库,但还要指定使用哪个命名空间,难道C++默认有多个命名空间?
问题比较多,我给了80分。
[最优解释]
iostream是在命名空间std里面,不是std在iostream里面
每个库中的变量和类声明和定义时都在一个namespace std {};中,使用时都要加std::才能引用
cin和cout也是在std里面定义的
虽然STL只有一个std命名空间,但是使用时仍然要指定,同时,楼主自己也可以命名一个变量与STL的某个变量相同,命名空间,就可以区分到底是哪个下面的库了
[其他解释]
采用命名空间的方法,可以避免一些名字冲突.
如你定义一个名为mynamespace的命名空间,可以在其中定义一个和标准库相同名字的函数,如cout,那么你引用的时候可以用
mynamespace::cout来使用.
建议lz多看书,可以获得更全面系统的了解.
[其他解释]
库就是库,基本上可以看成是一组对象cin和函数printf和类ifstream的集合,但是不管是对象/函数还是类,它总有个名字,是名字就有可能有冲突,所以才有命名/名字空间这么一说,这样一来,相同的名字在不同的空间下,表示了不同的东西,解决了冲突。名字空间只是名字的集合,库是对象,函数,类的集合,就是这样。
可以认为namespace是个容器,用来装名字的,不同的库的名字可以装在一起的,最典型的就是C++的std,其中有C库(std::printf),C++库如IO(std::cout << std::endl),还有STL(std::vector).
std是命名空间我知道,但是std是不是包含在iostream库里面的?
// 所以说,不是,这两者不存在包含关系
书上说库包含在命名空间里,是什么意思?
// 是指库的东西的名字,包含在namespace中
cin和cout是标准库里的还是std命名空间的里的?
// 它们是标准库的内容,名字在std中。
为什么编程时只导入一个标准库,但还要指定使用哪个命名空间,难道C++默认有多个命名空间?
如果你还用过其他的C++库比如boost,那么写程序的时候就会是:
using namespace std;
using namespace boost;
[其他解释]
主要就是为了避免命名冲突,使用方法看下面(MyPlugin是一个命名空间):
namespace MyPlugin
{
class CPlugin_U7Meeting_AVInfo :
public IPlugin_U7Meeting_AVInfo
{
public:
CPlugin_U7Meeting_AVInfo(void);
~CPlugin_U7Meeting_AVInfo(void);
.................
};
}
[其他解释]
名称空间是为限定名称的,就当作是追加名称前缀用于区分好了,缺省的名称空间是不指定或使用using指定了空间~
[其他解释]
C++ primer到后面才大概提了一下命名空间,搞的一开始我也云里雾的,有了命名空间机制,库可以属于某个命名空间,更大程度上杜绝了名称的重复。
[其他解释]
变量如果同名怎么办?只要它们属于不同的函数就行,函数如果同名怎么办?除了重载只要它们属于不同的类就行,类名如果重复怎么办?这就需要命名空间来帮忙区分了。
[其他解释]
1楼正解,其实命名空间是为了应对巨大项目中名称不够用的情况,在不同的命名空间中可以声明相同名称不同功能的方法。楼主说的iostream其实就是std里面的,你可以把std当成一个屋子,屋子里有好多家具,这些家具就是一些库和方法一类的东西。同样,可能还有别的屋子,比如你可以自己写一个stdd 这样,在stdd空间中就就可以放一些同样名称的东西。指定命名空间是因为,程序并不知道是否存在同样名称的库或者方法,指明哪个命名空间中的东西可以精确的找到,防止万一出现的同名情况。
[其他解释]
iostream是在命名空间std里面,不是std在iostream里面
每个库中的变量和类声明和定义时都在一个namespace std {};中,使用时都要加std::才能引用
cin和cout也是在iostream.h里面定义的吧
[其他解释]
我正在看C++ Primer