没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
内容概要:本文主要介绍了C++11的标准更新及其带给开发者的几项重要功能改进,包含move语义优化复制技术、智能指针管理内存、利用auto推导局部变量类型、Lambda表达式的实用价值以及增强标准函数和STL库(例如std::function、std::minmax等)的灵活性,同时阐述了这些变化带来的诸多优势:提高效率、增加代码的易读性和整洁度以及方便实现高级抽象编程等。 适用人群:软件开发者尤其是有一定经验并且希望进一步掌握现代化C++特性的专业开发人员。 使用场景及目标:针对日常编码过程中遇到的各种需求和痛点问题(如优化复制操作以节省资源、确保内存安全管理、提升代码书写效率等),运用C++11提供的新API和工具来进行有效应对,让应用程序变得更简洁、优美、高效且可靠。 阅读建议:对于文中讨论的不同方面,应结合实际应用场景深入理解和实验相应的示例代码;另外,考虑到部分概念较为复杂,建议通过多次尝试直至真正掌握所有知识点。
资源推荐
资源详情
资源评论
《浅析C++11新特性》系列分享专栏
简介
C++11包含了核心语言的新机能,并且拓展C++标准程序库,并且加入了大部分的C++ Technical Report 1程序库(数学上的特殊函数除外)。
文章
补充C++11新特性之std::function
补充c++11特性之正则表达式
补充c++11特性之Lambda表达式
补充c++11特性之override和final关键字
c++11特性之std::thread--初识
c++11特性之std::thread--初识二
c++11特性之initializer_list
c++11特性之std::thread--进阶
c++11特性之std::thread--进阶二
C++11新特性之 CALLBACKS
没有躲过的坑--指针(内存泄露)
C++11新特性之 rvalue Reference(右值引用)
C++11新特性之 Move semantics(移动语义)
C++11新特性之 default and delete specifiers
C++11新特性之 Static assertions 和constructor delegation
没有躲过的坑--获取一张图片的width和height
没有躲过的坑--This function or variable may be unsafe.
开始使用C++11的几个理由
C++11新特性应用--让你的程序更简洁、更漂亮
C++11新特性应用--实现延时求值(std::function和std::bind)
C++11新特性应用--占位符(std::placeholders std::is_placeholder std::is_bind_expression)
C++11新特性应用--让你的程序更高效(右值引用避免深拷贝)
C++11新特性之 std::forward(完美转发)
C++11中的便利工具--chrono库(处理日期和时间)
C++11中的小细节--字符串的原始字面量
C++11新特性应用--介绍几个新增的便利算法(不更改容器中元素顺序的算法)
C++11新特性应用--介绍几个新增的便利算法(更改容器中元素顺序的算法)
C++11新特性应用--介绍几个新增的便利算法(用于分区的几个算法)
C++11新特性应用--介绍几个新增的便利算法(用于排序的几个算法)
C++11新特性应用--介绍几个新增的便利算法(stl中的heap使用,最大堆)
C++11新特性应用--介绍几个新增的便利算法(关于最大值和最小值的算法)
C++11和Boost库
补充C++11新特性之std::function
博客《吐血整理C++11新特性》描述了一些C++11带来的新的特性,但是不够全面。在实际工作中,用到了std::function来实现回调函数。所以写该博客做一个简要补充。
类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达
式、函数指针、以及其它函数对象等。std::function对象是对C++中现有的可调用实体的一种类型安全的包裹(我们知道像函数指针这类可调用实体,是类型不安全的)。
通常std::function是一个函数对象类,它包装其它任意的函数对象,被包装的函数对象具有类型为T1, …,TN的N个参数,并且返回一个可转换到R类型的值。std::function使用 模板
转换构造函数接收被包装的函数对象;特别是,闭包类型可以隐式地转换为std::function。
最简单的理解就是:
通过std::function对C++中各种可调用实体(普通函数、Lambda表达式、函数指针、以及其它函数对象等)的封装,形成一个新的可调用的std::function对象;让我们不再纠结那
么多的可调用实体。
其中Lambda表达式也是C++11新增的内容。具体还不了解,应该类似于C Sharp中的Lambda表达式吧!
[code]//代码出自链接:http://www.jellythink.com/archives/771
#include <functional>
#include <iostream>
using namespace std;
std::function< int(int)> Functional;
// 普通函数
int TestFunc(int a)
{
return a;
}
// Lambda表达式
auto lambda = [](int a)->int{ return a; };
// 仿函数(functor)
class Functor
{
public:
int operator()(int a)
{
return a;
}
};
// 1.类成员函数
// 2.类静态函数
class TestClass
{
public:
int ClassMember(int a) { return a; }
static int StaticMember(int a) { return a; }
};
int main()
{
// 普通函数
Functional = TestFunc;
int result = Functional(10);
cout << "普通函数:"<< result << endl;
// Lambda表达式
Functional = lambda;
result = Functional(20);
cout << "Lambda表达式:"<< result << endl;
// 仿函数
Functor testFunctor;
Functional = testFunctor;
result = Functional(30);
cout << "仿函数:"<< result << endl;
// 类成员函数
TestClass testObj;
Functional = std::bind(&TestClass::ClassMember, testObj, std::placeholders::_1);
result = Functional(40);
cout << "类成员函数:"<< result << endl;
// 类静态函数
Functional = TestClass::StaticMember;
result = Functional(50);
cout << "类静态函数:"<< result << endl;
return 0;
}
关于可调用实体转换为std::function对象需要遵守以下两条原则:
转换后的std::function对象的参数能转换为可调用实体的参数;
可调用实体的返回值能转换为std::function对象的返回值。
std::function对象最大的用处就是在实现函数回调实现函数回调(实际工作中就是用到了这一点),使用者需要注意,它不能被用来检查相等或者不相等,但是可以与NULL或者nullptr进行比较
。
补充c++11特性之正则表达式
C++11中也将正则表达式纳入了新标准的一部分,不仅如此,它还支持了6种不同的正则表达式的语法,分别是:ECMASCRIPT、basic、extended、awk、grep和egrep。其中E
CMASCRIPT是默认的语法,具体使用哪种语法我们可以在构造正则表达式的时候指定。
正则表达式库提供表示正则表达式,这是一种用于字符串内执行模式匹配小型的语言的类。
主要的类:
basic_regex
regular expression object
sub_match
identifies the sequence of characters matched by a sub-expression
match_results
identifies one regular expression match, including all sub-expression matches
算法:
These functions are used to apply the regular expression encapsulated in a regex to a target sequence of characters.
regex_match
attempts to match a regular expression to an entire character sequence
regex_search
attempts to match a regular expression to any part of a character sequence
regex_replace
replaces occurrences of a regular expression with formatted replacement text
迭代器:
The regex iterators are used to traverse the entire set of regular expression matches found within a sequence.
regex_iterator
iterates through all regex matches within a character sequence
regex_token_iterator
iterates through the specified sub-expressions within all regex matches in a given string or through unmatched substrings
异常:
This class defines the type of objects thrown as exceptions to report errors from the regular expressions library.
regex_error
reports errors generated by the regular expressions library
例子代码:
[code]#include <iostream>
#include <iterator>
#include <string>
#include <regex>
int main()
{
std::string s = "Some people, when confronted with a problem, think "
"\"I know, I'll use regular expressions.\" "
"Now they have two problems.";
std::regex self_regex("REGULAR EXPRESSIONS",
std::regex_constants::ECMAScript | std::regex_constants::icase);
if (std::regex_search(s, self_regex)) {
std::cout << "Text contains the phrase 'regular expressions'\n";
}
std::regex word_regex("(\\S+)");
auto words_begin =
std::sregex_iterator(s.begin(), s.end(), word_regex);
auto words_end = std::sregex_iterator();
std::cout << "Found "
<< std::distance(words_begin, words_end)
<< " words\n";
const int N = 6;
std::cout << "Words longer than " << N << " characters:\n";
for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
std::smatch match = *i;
std::string match_str = match.str();
if (match_str.size() > N) {
std::cout << " " << match_str << '\n';
}
}
std::regex long_word_regex("(\\w{7,})");
std::string new_s = std::regex_replace(s, long_word_regex, "[$&]");
std::cout << new_s << '\n';
}
Output:
Text contains the phrase 'regular expressions'
Found 19 words
Words longer than 6 characters:
people,
confronted
problem,
regular
expressions."
problems.
Some people, when [confronted] with a [problem], think
"I know, I'll use [regular] [expressions]." Now they have two [problems].
剩余73页未读,继续阅读
资源评论
天涯学馆
- 粉丝: 1916
- 资源: 312
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功