百度空间 | 百度首页 
 
查看文章
 
从vc6转至vc2005需要注意的几个问题
2009-04-13 15:48
原文:http://www.cppblog.com/sandy/archive/2006/03/13/4081.aspx

作为C++编译器,从vc6到vc8最大的调整就是对C++标准的支持更好了。
    我发现的几点不同。

a. For 循环的声明

       Vc6: for(int i<0;i<100;++i){}; j = i;   (ok)

Vc8: for(int i<0;i<100;++i){}; j = i;   (illegal)

      int i; for(i<0;i<100;++i){}; j = i;   (ok)

Vc8中的for循环中变量的有效期仅仅在for 循环的开始与结束期间有效。

b.string实现
   

Vc6: string s; char *p = s.begin(); (ok)

Vc8: string s; char *p = s.begin(); (illegal)

     string s; char *p = const_cast<char *>(s.c_str()); (ok)

在vc6中,string::iterator被定义为char *,但是vc8中不是

c.更严格的typename声明的需要

Vc6:

template<class T>

class Test

{

public:

typedef map<T,T> mymap;

      mymap::iterator mymap_iter;

}; (ok)

Vc8:

template<class T>

class Test

{

public:

      typedef map<T,T> mymap;

      mymap::iterator mymap_iter;

};     (illegal)

typename mymap::iterator mymap_iter;(ok)

vc8更加严格的要求程序员在类型前面加上typename以避免歧义

d.不允许默认的int类型

Vc6: fun() { return 0;} (ok)

Vc8: fun() { return 0;} (illegal)

int fun() { return 0;} (ok)

vc8不支持默认返回int类型

e.typedef必须是public才能被外界访问到

Vc6:

Class Test

{

      typedef int iterator;

};

Test::iterator i; (ok)

Vc8:

Class Test

{

      typedef int iterator;

};

Test::iterator i; (illegal)

Class Test

{

public:

      typedef int iterator;

};

Test::iterator i; (ok)

附录:一些资源(From msdn)

Overviews:

Moving from 6.0 to 7.1:

Moving from 7.1 to 8.0:


类别:c/c++ | 添加到搜藏 | 浏览() | 评论 (1)
 
最近读者:
 
网友评论:
1
2009-04-15 17:43 | 回复
fuck
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu