( 异 块中, 常)。在以前,如果使用了/EHs,那么在一个 catch(…)块中,也许可能、也许不可能 )。在以前,如果使用了 在以前 , 块中 也许可能、 捕捉到结构化异常,因为此行为是没有定义且不可靠的;现在,再使用 捕捉到结构化异常,因为此行为是没有定义且不可靠的;现在,再使用/EHs 时,就可保 证不会捕捉到结构化异常。 保持一致, 证不会捕捉到结构化异常。如果想与以前版本的 Visual C++保持一致,并且捕捉异步 保持一致 结构化异常,还是应该在编译时使用 结构化异常,还是应该在编译时使用/EHa。 。 8、初始化顺序 、 以往,如果代码中同时有托管与本地全局变量及对象, 以往,如果代码中同时有托管与本地全局变量及对象,那么初始化顺序是不确定 对象 的;如代码中存在托管对象与本地对象互操作,就不能保
证哪一个对象先初始化了。现在, 如代码中存在托管对象与本地对象互操作,就不能保证哪一个对象先初始化了。现在, Visual Stuio 2005 可保证所有的本地全局变量及对象先初始化,然后才初始化托管全 可保证所有的本地全局变量及对象先初始化, 局变量及对象。 局变量及对象。 9、printf 、 就目前来说, 中的%n 格式化指示符一般用于指定输出的字符个数。这 格式化指示符一般用于指定输出的字符个数。 就目前来说,printf 中的 已经确认为一个安全隐患,并且已禁用, 已经确认为一个安全隐患,并且已禁用,但可以使用 set_printf_count_output 来启
用它; 一个零值( )可禁用它, 用它;通过传递给 set_printf_count_output 一个零值(0)可禁用它,而传递任意 一个其他值可再次启用。 一个其他值可再次启用。 其他值可再次启用 10、swprintf 函数 、 为与 C++标准保持一致,对 swprintf 函数也作了修改,现在它已遵循 C++ 标准保持一致, 函数也作了修改, 标准保持一致 标准了。 标准了。在 C++中,通过适当的参数,可实现重载;这个函数的老版本已不再建议使用, 中 通过适当的参数,可实现重载;这个函数的老版本已不再建议使用, 是不允许重载的,因此如果使用老格式,将会返回一个错误。 因为在 C 中,是不允许重载的,因此如果使用老格式,将会返回一个错误。编译器中的突 破性变化 除了那些会影响到库的变化之外,也有一些变化会影响到编译器。 除了那些会影响到库的变化之外,也有一些变化会影响到编译器。以下是 Visu al C++ 2005 中编译器的主要变化,需再次提醒的是,此处并没有列出所有的变化,但 中编译器的主要变化,需再次提醒的是,此处并没有列出所有的变化, 使用者及内部合作者所确认的关键性变化 却是微软公司 VC++使用者及内部合作者所确认的关键性变化。 使用者及内部合作者所确认的关键性变化。 指向成员的指针 在之前的版本中,一个指向成员的指针不需使用取址操作符( )就能获取, 在之前的版本中,一个指向成员的指针不需使用取址操作符(&;)就能获取,现 已经严格按照标准,必须要使用取址操作符, 在,Visual C++ 2005 已经严格按照标准,必须要使用取址操作符,这也有助于消除 潜在的运行时错误。 库的许多地方需要修改,同时意味着, 潜在的运行时错误。但也导致了 MFC 库的许多地方需要修改,同时意味着,可能会对现 有的程序造成影响。 有的程序造成影响。 范围限制规则 循环声明中,默认情况下不强制执行范围限制规则。在之前的版本中, 在 for 循环声明中,默认情况下不强制执行范围限制规则
。在之前的版本中,f or 循环中变量的生命期将会延续到循环之外,为与标准兼容,for 循环中定义的变量,现 循环中变量的生命期将会延续到循环之外,为与标准兼容, 循环中定义的变量, 循环内使用。 在只限定在 for 循环内使用。 wchar_t 类型 现在, 已为默认内置类型。这就是说,也