C++
zwvista
这个作者很懒,什么都没留下…
展开
-
C++17尝鲜:变长 using 声明
using 声明先来看 using 声明在类中的应用:代码1#include <iostream>using namespace std;struct A { void f(int) {cout << "A::f(int)" << endl;}};struct S : A {};int main(){ S s...原创 2018-07-24 22:10:12 · 1339 阅读 · 1 评论 -
C++14尝鲜:函数返回类型自动推导
函数返回类型自动推导原创 2017-01-17 23:49:55 · 10417 阅读 · 0 评论 -
C++17尝鲜:fold expression(折叠表达式)
折叠表达式原创 2017-01-02 20:21:17 · 16096 阅读 · 3 评论 -
C++14尝鲜:别名模板和变量模板
别名模板:带模板参数的类型别名;变量模板:变量的家族原创 2017-01-19 07:34:28 · 6237 阅读 · 0 评论 -
C++14尝鲜:decltype 和 decltype(auto)
decltype 和 decltype(auto)原创 2017-01-16 11:00:08 · 18029 阅读 · 5 评论 -
C++14尝鲜:constexpr函数(编译期函数)
constexpr函数原创 2017-01-14 21:58:32 · 15793 阅读 · 1 评论 -
FP大串烧:SQL,LINQ,F#以及STL(1)
看看函数型编程范式是如何将这几种看似互不相关的技术紧密联系在一起的。注:本文中函数型编程范式主要涉及集合(列表)操作。SQL主要涉及SELECT语句。LINQ主要涉及LINQ to Objects,示例代码取自Visual Studio自带的C# Samples。F#主要涉及list和Seq库函数。STL指C++标准库,主要涉及算法部分。Restriction(Filtering)原创 2010-10-13 01:15:00 · 2376 阅读 · 2 评论 -
C++14尝鲜:用泛型lambda实现tuple
泛型lambda与tuple原创 2017-01-25 14:26:35 · 893 阅读 · 0 评论 -
C++11尝鲜:右值引用和转发型引用
解决移动语义及完美转发问题原创 2013-10-05 19:52:37 · 13239 阅读 · 5 评论 -
C++17尝鲜:把整形变量 i 初始化成1的七种方法
重新认识C++的初始化原创 2016-12-22 12:51:49 · 2076 阅读 · 0 评论 -
编程技巧:将lambda用作局部函数
预备知识:变量及函数的作用域应该做到最小化根据这一原则,如果某个函数A只在另一个函数B内调用的话,A函数应该在B函数内定义并使用,即把A函数定义成B函数内部的局部函数。注:这里的函数是泛指,OOP语言中类的方法以及FP语言中的lambda都可视作函数。以下以C#代码为例using System;namespace ConsoleApplication1{ class P原创 2012-07-20 08:26:53 · 1533 阅读 · 0 评论 -
编程技巧:lambda与递归
以下代码演示如何使用lambda来定义阶乘这一递归函数。C#Func factorial = null;factorial = x => x == 0 ? 1 : x * factorial(x - 1);int f5 = factorial(5); // f5 == 120VBDim factorial As Func(Of Integer, Integer)fact原创 2012-07-23 07:17:26 · 2058 阅读 · 0 评论 -
C++惯用法:metafunction(元函数)
元函数:编译期的函数Metafunction: compile-time analogs of runtime functions 与运行期使用函数封装算法相对应,在C++编译期同样存在着封装算法进行编译期计算的需要。元函数(metafunction)便是实现这一需求的主要手段。元函数这一概念最早是由Boost.MPL类库提出并定义的。 作为在编译期进行计算的函数,元函数原创 2010-03-27 14:38:00 · 4310 阅读 · 0 评论 -
C++14尝鲜,趣味编程:用lambda实现斐波那契数列
用lambda实现斐波那契数列原创 2017-02-22 08:52:54 · 1942 阅读 · 0 评论 -
C++17尝鲜:编译期 if 语句
Constexpr If(编译期 if 语句)以 if constexpr 打头的 if 语句被称为 Constexpr If。 Constexpr If 是C++17所引入的新的语法特性。它为C++语言提供了在编译期处理条件分歧的功能。 运行期 if 语句 预处理 if 语句 编译期 if 语句 if (condition) { statement;} el...原创 2018-07-24 22:09:28 · 2259 阅读 · 1 评论 -
C++17尝鲜:variant
variantvariant 是 C++17 所提供的变体类型。variant<X, Y, Z> 是可存放 X, Y, Z 这三种类型数据的变体类型。与C语言中传统的 union 类型相同的是,variant 也是联合(union)类型。即 variant 可以存放多种类型的数据,但任何时刻最多只能存放其中一种类型的数据。与C语言中传统的 union 类型所不同的是,var...原创 2018-07-24 22:08:39 · 12802 阅读 · 2 评论 -
C++17尝鲜:string_view
string_viewstring_view 是C++17所提供的用于处理只读字符串的轻量对象。这里后缀 view 的意思是只读的视图。通过调用 string_view 构造器可将字符串转换为 string_view 对象。 string 可隐式转换为 string_view。string_view 是只读的轻量对象,它对所指向的字符串没有所有权。string_view通常用于函数...原创 2018-07-24 22:07:51 · 5061 阅读 · 3 评论 -
正则表达式(Java,C#,C++)
课题使用正则表达式匹配字符串 使用正则表达式 “\d{3}-(\d{4})-\d{2}” 匹配字符串 “123-4567-89” 返回匹配结果:’”123-4567-89” 以及 “4567”使用正则表达式替换字符串 使用正则表达式 “\d+” 匹配字符串 “123-4567-89” 将匹配结果即三个数字串全部翻转过来,返回结果 “321-7654-98”。使用正则表达式分割字符串原创 2017-12-01 19:55:36 · 715 阅读 · 0 评论 -
C++17尝鲜:类模板中的模板参数自动推导
模板参数自动推导在C++17之前,类模板构造器的模板参数是不能像函数模板的模板参数那样被自动推导的,比如我们无法写std::pair a{1, "a"s}; // C++17而只能写std::pair<int, string> a{1, "a"s}; // C++14为了弥补这一缺陷,标准库为我们提供了 std::make_pair 函数,通过函数模板的模板参数自动推导的功能, 免去我们在构造 p原创 2017-10-29 12:14:58 · 3061 阅读 · 0 评论 -
协变(covariance),逆变(contravariance)与不变(invariance)
协变,逆变与不变能在使用父类型的场景中改用子类型的被称为协变。 能在使用子类型的场景中改用父类型的被称为逆变。 不能做到以上两点的被称为不变。 以上的场景通常包括数组,继承和泛型。协变逆变与泛型(C#,Java)在C#中,泛型参数的类型缺省是不变的,但是我们可以在定义泛型类或接口时通过给参数类型加上out或in来标注该参数类型是协变还是逆变。 * 协变意味着你能把 IEnumerable<s原创 2017-11-03 17:22:16 · 3892 阅读 · 0 评论 -
C++17尝鲜:结构化绑定声明(Structured Binding Declaration)
结构化绑定声明结构化绑定声明,是指在一次声明中同时引入多个变量,同时绑定初始化表达式的各个子对象的语法形式。 结构化绑定声明使用auto来声明多个变量,所有变量都必须用中括号括起来。cv-auto+引用 [变量1, 变量2, ... 变量n ] = 初始化表达式;cv-auto+引用 [变量1, 变量2, ... 变量n ] (初始化表达式);cv-auto+引用 [变量1, 变量2, ...原创 2017-09-27 11:54:13 · 16885 阅读 · 0 评论 -
C++17尝鲜:在 if 和 switch 语句中进行初始化
初始化语句在C++17中,类似于 for 语句,在 if 和 switch 语句的判断条件之前也能加上初始化语句,语法形式如下:if (初始化语句; 条件) 语句 else 语句switch (初始化语句; 条件) 语句这里的初始化语句是可选的,它可以是初始化表达式,也可以是变量声明。带初始化语句的 if 和 switch 语句在语义上相当于:{ 初始化语句; if (条件) 语句原创 2017-10-18 08:23:22 · 3452 阅读 · 0 评论 -
FP编程实践:CPS编程风格及其C++模拟实现
Haskell代码cfold2 f z [] = zcfold2 f z (x:xs) = f x z (/y -> cfold2 f y xs)cfold f z l = cfold2 (/x t g -> f x (g t)) z lCPS> cfold (+) 0 [1,2,3,4] 10 CPS> cfold2 (/x t g -> (x : g t)) []原创 2010-01-14 17:43:00 · 2556 阅读 · 0 评论 -
在 Eclipse 中使用 C++
在Eclipse中使用C++原创 2014-11-15 09:54:11 · 1884 阅读 · 0 评论 -
FP大串烧:SQL,LINQ,F#以及STL(2)
Aggregates原创 2010-10-23 22:47:00 · 2445 阅读 · 0 评论 -
C++17尝鲜:基于区间的for循环
How the new range-based for loop in C++17 helps Ranges TS?原创 2016-08-24 22:33:41 · 6663 阅读 · 0 评论 -
Qt学习笔记
使用C++11使用SQLite数据库原创 2016-06-08 10:01:47 · 571 阅读 · 0 评论 -
展望C++17
C++17原创 2016-03-21 00:58:57 · 3912 阅读 · 0 评论 -
C++备忘录:const
const 变量声明 在变量声明中使用const表明该变量具有只读常量属性,除非用extern声明,否则该变量必须具有初值,且声明之后不可修改。const int n = 0;n = 1; //compile error const 参数 在参数列表中使用const表明该参数在函数内部具有只读常量属性,即不可修改。void f(const int& n){原创 2010-10-30 23:32:00 · 1531 阅读 · 2 评论 -
FP编程实践:在C++0x中模拟F#的List.map和List.choose库函数
F#代码let list1 = [1; 2; 3]let newList = List.map (fun x -> x + 1) list1printfn "%A" newList//[2; 3; 4]let listWords = [ "and"; "Rome"; "Bob"; "apple"; "zebra" ]let isCapitalized (string1:string原创 2010-04-12 19:14:00 · 1769 阅读 · 0 评论 -
Boost.Signals2:在C++中实现事件处理
#include #include using std::cout;using std::endl;struct A{ void f() { int a = 2; event(1, &a); } boost::signals2::signal event;};void h5(int i, int* p) {cout << "h5\t" << i << " " <<原创 2012-10-29 13:48:30 · 4755 阅读 · 0 评论 -
如果你的软件事关重大,你就会用C++编写它(If your software matters, you will write it in C++)
Programming F#的作者Chris Smith在博客中撰文力挺C++,以下为文章大意。Chris Smith曾经在某次学术会议上长篇大论地讲述F#的精妙之处,F#之父Don Syme很欣赏他的热情,但同时也提醒他,“如果你的软件事关重大,你就会用C++编写它。(If your software matters, you will write it in C++)”C++并非唯一正翻译 2012-05-04 16:36:52 · 1344 阅读 · 0 评论 -
C++11尝鲜:Variadic Function Templates(带变长参数的函数模板)(续)
代码1#include #include #include #include #include #include using namespace std;using namespace boost::fusion;using namespace boost::lambda;templatevoid output(First const& first, Rest const原创 2011-10-20 12:44:52 · 3126 阅读 · 2 评论 -
C++编译器优化:Copy Elision(省略不必要的拷贝)
为避免对临时对象进行不必要的拷贝,C++编译器常使用一种名为Copy Ellision(拷贝去除)的优化技术,该技术至少包括以下两项内容: 返回值优化(RVO),即通过将返回值所占空间的分配地点从被调用端转移至调用端的手段来避免拷贝操作。返回值优化包括具名返回值优化(原创 2011-10-05 17:56:28 · 8051 阅读 · 2 评论 -
C++0x:VC10编译器的bug
Visual Studio 2010 的 C++ 编译器(VC10)支持六项C++0x新特性:auto、右值引用、static_assert、nullptr、lambda表达式以及decltype。与同样在标准出台之前诞生的VC6相比较,在与标准的契合度这一点上VC10显然有了巨大的进步,但遗憾的是,在功能增强的同时编译器自身也不可避免地引入了不少bug,尤其是关于lambda表达式,下面略原创 2010-05-22 00:11:00 · 2476 阅读 · 0 评论 -
C++0x尝鲜:如何获取lambda表达式的返回类型
int f() { return 1; }struct X{ float operator () () const { return 2; } // If the following is enabled, program fails to compile // mostly because of ambiguity reasons. //double operato原创 2010-04-26 22:44:00 · 2272 阅读 · 0 评论 -
C++0x新特性:decltype类型指示符与返回类型后置语法
关于decltype关键字 decltype是C++0x所引入的用于提取表达式类型的新关键字,其语法形式为:decltype(expression) 。这种语法形式在C++0x草案中被称为decltype类型指示符。 根据C++0x最终草案,decltype(e)所提取的类型由以下规则决定: 如果e是一个没有外层括弧的标识符表达式或者类成员访问表达式,那么declty原创 2010-04-11 10:26:00 · 6858 阅读 · 0 评论 -
C++0x尝鲜:用lambda表达式模拟Ruby的过程对象
关于C++0x预计于明年底推出的新标准C++0x,虽说已接近收官阶段,却仍有若干有待接纳的新提案被提出。尤其值得关注的是,与lambda表达式以及局部函数相关的提案“Unified Function Syntax(统一的函数语法)”,尽管不受标准委员会待见(两年间历经四次延迟表决,两次不予通过),仍然“顽强地”推出了其第7个版本N2989,提案作者锲而不舍的精神实在令人钦佩。 关于la原创 2010-01-10 12:24:00 · 1370 阅读 · 0 评论 -
C++0x尝鲜:lambda表达式
关于C++0x作为C++下一代标准的C++0x,其命名的本意无非是“200x年正式推出的C++新标准”,但目前(2010年)显然已没有可能,似乎改名为C++1x才名正言顺,不过为了避免不必要的混乱,C++标准委员会仍然坚持使用原名。 关于lambda表达式在函数型语言(FP)中大行其道的lambda表达式被引入以“多范式”(multi-paradigm)为标签的C++语言应该是一件原创 2010-01-07 15:35:00 · 4769 阅读 · 2 评论 -
C++14与lambda
关于C++14据Hurb Sutter在题为“C++的未来”的演讲中透露,C++标准委员会在推出C++11标准之后,并未作过多休整即已投入到下两代标准(C++14以及C++17)的制定工作之中。其中预计于明年推出的C++14被定位于修正并完善目前的C++11标准。尽管时间并不宽裕,下一代标准C++14中仍然包含了一些引人关注的新特性。从目前已有的提案来看,C++14中最大的新特性莫过于lamb原创 2013-01-18 17:15:21 · 9637 阅读 · 2 评论