c++做对了的事情
1,c#专有.c++更通用,
2,可以使用操作符_文件来使用特定后缀操作,类似操作符重载.如操作符 "" _文件.对""之后的后缀起作用.
3,f(g(x)):
元<类 F,类 G>
动 fgx(F f,G g){
中[=](动&&x){//返回λ,复制f,g.
中 f(g(x));
中 f(g(前向<推导(x)>(x)));//还可这样,足够控制
};//函数组合.
}//以前版本都不爽.
c#中使用时,得显式指定类型.c++现在还不支持->/=>操作.
4,对每一参数,应用函数:
元<型名 F,型名...O>
空 每一参(F&f,O&&...o){
...//[](...){}//空操作?
((f(前向<O>(o)),0)...);//这是展开表达式,非常爽
//一系列的(f(o),0),其实都不必要.(f(o),...)这样就行了.
}//c#现在不支持
5,c++是值语义语言,一切都是直接的操作.在c#中a+=b重写为a=a+b,null操作为空串.
6,c++中对象是值.想间接,得付出.构造器中:名{名}比在{}中更好.
而c#/java中,类实例间接,新出来对象,默认为0,开始就是null.初化时一大堆.很难包装,特别是泛型的时候.更难.没有set表明不想修改.
7,引用语义,使得很难追踪.到处都是指针,很难并行.c++的指针,基本要求独针.在构造器中:内容{源.大小()<=5?源:抛 太大{}}{}.
8,自由函数也很爽.c#/java莫名其妙.都是折腾.常也非常不错.
9,c#一大堆 公/私都是搞笑的.还有置/取啊,都是折腾.c#是引用/指针不可变,所指的内容却可以可变的,因而谁搞的破坏,你也不知道.其常针对编译时知道的常(串,一些构).而c++中实现非值语义让你怀疑人生,为啥要这样做?.
10,友是有用的.有时用得好,友能够帮助封装.典型如两步初化.你可以:
类 两步{
两步();
初化();//都为私
公:
空 使用();
//...
静 动 工厂(){//这是静态工厂方式,但也不好.
静 两步 a;a.初化();中 a;
}//其他方式更差,改成下面这样
友 动 工厂(){//这样最好.
两步 a;a.初化();中 a;
}
};
//用法:
动 t=工厂();
t.使用();
c#,java那么多访问限定器,反而没有c++简单.c++的友更精确,应用到简单的类/函数或模板函数.但要小心模板特化.
11,迭代器.允许你自由操作.各种容器.算法与容器无关.而c#你就完全没有自由,你只能调用别人写好的.你如何写自己的算法?而c#就要自己实现各种需求算法,简直是搞笑嘛.
12,c++的迭代器通用.而不是c#的一例例实现.不用虚函数及不必要的接口.是啊c#,根本不行啊.都是吹啊.
13,c#的可变,都要求是对象,而c++是任意可序化类型.更先进的一句话就搞定.一句话求加中(N+...),就完了.c#一大堆冗余函数,c++一个模板元就搞定的事情.
浙公网安备 33010602011771号