更新:2007 年 11 月
如果要升级的程序所使用的标准 C++ 库代码是用 Visual C++ 6.0 编译的,则应注意下列问题:
- reverse_iterator 的改动 
- 某些迭代程序不再和指针一样 
- MIN/MAX #define 的改动 
reverse_iterator 的改动
标准 C++ 库 reverse_iterator 类定义的一些类型的名称已更改。同时,该类有不同的模板参数。
下面的示例可在 Visual C++ 6.0 中编译,但在当前版本中失败:
#include <iterator>
#include <vector>
typedef std::iterator<std::random_access_iterator_tag, char, int> random_it;
int main( )
{
   char c;
   
   // too many template args for VC7
   typedef std::reverse_iterator< random_it, char, char&, char *, int > rev_it; 
   rev_it::reference_type x = c;
   rev_it::pointer_type y = 0;
   rev_it::iter_type z;
   /*
   // try the following code instead
   typedef std::reverse_iterator< random_it > rev_it;
   rev_it::reference a = c;
   rev_it::pointer b = 0;
   rev_it::iterator_type c1;
   */
}
某些迭代程序不再和指针一样
在一些标准 C++ 库类中,迭代程序不再定义成指针类型。
下面的示例可在 Visual C++ 6.0 中编译,但在当前版本中的指示行上失败:
#include <string>
#include <vector>
#include <algorithm>
bool pred(int i) { 
   return true; 
};
int main()
{
   std::string str("test");
   const char *pszstr = str.begin();       // LINE 8: INCORRECT
   const char *pszStr2 = str.c_str();      // OK
   const char *pszStr3 = &(*str.begin());  // OK
   std::vector<int> v;
   int *pint = std::remove_if(v.begin(), v.end(), pred);   // LINE 13: INCORRECT
   std::vector<int>::iterator iint = std::remove_if(v.begin(), v.end(), pred);   // OK
}
MIN/MAX #define 的改动
_MIN 和 _MAX 的标准 C++ 库定义由:
#define _MAX   _cpp_max
#define _MIN   _cpp_min
更改为:
#define _MAX   (max)
#define _MIN   (min)
这使 std::_MIN 的定义无效。
下面的示例可在 Visual C++ 6.0 中编译,但在当前版本中的指示行上失败:
#include <xutility>
#include <stdlib.h>
using namespace std;
int main()
{
   std::_MAX(3,4);   // error
   _MAX(4,5);
}