using声明以及VS2005跟创天中文VC++的一点不同

先来看看一段程序

#include<iostream.h>
using std::cin;
using std::cout;
using std::endl;
int main()
{
 cout<<"Enter two numbers:"<<endl;
 int v1,v2;
 cin>>v1;
 cin>>v2;
 cout<<"The sum of "<<v1
  <<" and "<<v2
  <<" is "<<v1+v2<<endl;
 return 0;
}

跟以往的程序不同,在头文件下面加了using声明,因为我用的是创天中文VC++(家里的2500+、NF2主板、512内存不太适合按照vs2005,而且是vs2005我不会用.....)

在创天中文VC++里面不定义using声明也可以直接用cout而不用在前面加上std::字样,这点不太明白,为什么两者编程环境却有如此区别.

C++ Primer 4th是这么说的,对cin,cout和endl进行using声明,就意味着以后可以省去前缀std::,直接使用命名空间中的名字,这样代码可以更易读.

3.1命名空间的using声明

       在之前的程序,都是通过直接说明名字来自std命名空间,来引用标准库中的名字.例如,需要从标准输入读入数据时,就用std::cin.这些名字都用了::操作符,该操作符是作用域操作符.它的含义是右操作数的名字可以在左操作数的作用域中找到.因此,std::cin的意思是说所需名字cin是在命名空间std中定义的,显然,通过这种符号引用标准库名字的方式是非常麻烦的(这里估计编译环境是VS2005,而不是我所用的创天VC++,)

C++提供了更简洁的方式来命名空间成员.这是一种最安全的机制:using声明.

使用using声明可以在不需要加前缀namespace_name::的情况下访问命名空间中的名字.using声明的形式如下:

using namespace::name;

一旦使用了using声明,我们就可以直接引用名字,而不需要再引用该名字的命名空间:

#include<string.h>
#include<iostream.h>
using std::cin;
using std::string;
int main()
{
 string s; //ok:string is now a synonym for std::string
 cin>>s;   //ok:cin is now a synonym for std::cin
 cout<<s;  //error:no using declaration;we must use full name
 std::cout<<s; //ok: explicitly use cout from namespace std
}

没有using声明,而直接使用命名空间中名字的未限定版本是错误的,尽管有些编译器也许无法检测出这种错误(创天中文VC++就是其中一种 -.-)

1.每个名字都需要一个using声明.

一个using声明一次只能作用于一个命名空间成员.using声明可用来明确制定在程序中用得到的命名空间中的名字,如果希望使用std(或其他的命名空间)中的几个名字,则必须为要用到的每个名字都提供一个using声明.如文章开头的程序.对cin,cout和endl进行using声明,就意味着以后可以省去前缀std::

2.使用标准库类型的类定义

有一种情况下,必须总是使用完全限定的标准库名字:在头文件中.

理由是头文件的内容会被与处理器复制到程序中.用#include包含文件时,相当于头文件中的文本将成为我们编写文件的一部分.如果在头文件中放置using声明,就相当于在包含该头文件的每个程序中都会放置了同一using声明,不论该程序是否需要using声明.

实践告诉你:通常,头文件中应该只定义确实必要的东西.请养成这个好习惯. 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值