商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文

Visual C++ 2008新特性:MFC的增强

作者:IT168 苏鹏  2008-05-19
【IT168技术专稿】

    虽然在托管语言的发展方面C++似乎较之其他语言发展步调缓慢,但是C++语言的新功能依然不逊于任何其他托管语言。与Visual Basic这种日新月异的语言不同,C++语言一直保持其不变的风格是它的一个优良传统,当然C++的也并非永远一成不变,其每一步变化无不是经过反复推敲的经典之作。目前正在制定中的下一代 C++ 标准 C++ 0x 将通过对语言本身的扩展来满足最近十年来开发人员对它提出的各式各样的需求。技术报告1(TR1)是这一标准建立过程中的过度产品,更多的语法特性将作为最终版本的一部分进行发布。

标准模板库 数组
    现有的C++标准模板库中有个备受争议的设计,就是其没有引入定长数组,当然有很多办法解决这一问题,比如使用C语言风格的数组,或者使用vector甚至使用第三方类库,但是这些方法显然没有解决这一问题。所以为C++新标准添加定长数组简直是天经地义的,使用新数组集合的方法也非常简单,数组长度被作为模板的一个参数,而数组的操作方式和STL中的vector对象完全一致。

#include <array> 
#include <iostream>
#include <string>

std::tr1::array<int, 3> intArray = {4, 8, 10};

std::tr1::array<int, 3> intArray2 = {4, 8};
intArray2[2] = 10;

std::cout << ((intArray == intArray2)?
std::string("Arrays are equal"):
std::string("Arrays aren't equal")
);

std::cout << std::endl;

for (std::tr1::array<int, 3>::const_iterator it =
intArray2.begin();
it != intArray2.end();
++it) {
std::cout << " " << *it;
}
    对于上面的代码有些内容需要引起注意:
    1. 在数组声明的过程中既可以定义全部内容也可以只定义一部分内容,编译器会判断数据类型和数组长度,并自动完成数组定义
    2. “==”操作符被重载过了,重载之后的操作符可以用于比较两个数组中的元素是否相同。
    3. 迭代器的工作方式和之前的标准模板库中集合对象的使用保持一致
    Visual C++ 2008通过使用std::tr1名字空间引入了上面这些TR1的扩展功能。

正则表达式

    虽然很多第三方工具已经在C++中实现了正则表达式功能,但是这些工具对于标准C++的整合远远没有达到大家所期望的程度。把正则表达式引入C++之后,正则表达式的运算结果就可以直接被STL中的其他运算所引用,并且使用正则表达式的代码也可以被各种编译器编译。

    在TR1中引入的正则表达式类库basic_regex有点类似于标准C++中很重要的类库basic_string,对于一个basic_regex类,你需要指定的是使用char或者wchar字符作为参数。

    basic_regex类的字符内容是正则表达式字符和符号,basic_regex类支持许多种正则表达式标准,如basic, extended, ECMAScript, awk, grep, 和 egrep。在设置好正则表达式字符串之后,basic_regex类的对象通过一系列函数接收一个用于拆分的字符串并进行正则匹配。

    用于正则匹配的函数有3个,regex_match, regex_search 和 regex_replace.其中regex_match函数用于判断接受的字符串是完全否匹配正则表达式,regex_search用于返回参数中符合正则表达式的字符串内容,返回对象是一个match_results。而regex_replace用于替换提交字符串中正则表达式匹配的内容。

    示例代码显示了如何使用正则表达式匹配一个电子邮件地址,并把匹配结果显示出来 .
#include <regex> 
#include <iostream>
#include <string>

basic_regex<char> regex("[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}",
basic_regex<char>::icase);

cout<< std::boolalpha << regex_match("GoOD@DOMAIN.COM", regex)
<< std::endl;

cout<< std::boolalpha << regex_match("@DOMAIN.COM", regex)
<< std::endl;

1 2
【内容导航】
第1页: 第1页 第2页: 函数对象
©版权所有。未经许可,不得转载。
[责任编辑:胡铭娅]
·LoadRunner创建测试脚本
·用LoadRunner编写socket应用的测试脚本
·使用LoadRunner 编写JAVA 测试脚本
·LoadRunner脚本编程
·【高端访谈】寻找下一代CTO向冠军冲刺
·【技术专题】SQL Server 2008数据挖掘指南
·【高端访谈】畅谈“寻找下一代CTO”
·【热点专题】08年.NET最受欢迎的图书