我为什么用C++

参加工作7年了,作为一个全栈码农,工作中C++、Java、Python、Lua甚至前端Javascript都有涉及,但是自己私下都是用C/C++做项目(包括个人网站后台都是用C++开发的)。

在我的技术认知范围内C/C++能完成一切任务,我偏执地用C++实现个人笔记网站(https://www.winfengtech.com),甚至开发了一个cppshell将C/C++当作脚本语言来使用,言归正传,下面单纯从语言层面说一说我为什么使用C++。

无运行环境的拖累

在运行Java、Python等应用前你需要安装对应的运行环境或虚拟机,然而常见操作系统自带C/C++运行环境,你可以发布C/C++程序给小白用户使用,这也是桌面应大多用C++开发的原因之一。

直接调用操作系统原生API

操作系统都提供原生C语言API,在C++中你可以直接调用这些API函数。你也可以用C++的抽象能力实现类库的核心功能,然后提供C语言接口编译成动态库方便Java、Python、Lua等语言调用。

析构函数精确控制成员的生命周期

比如说一个对象打开了一个文件,可以在对象的析构函数中关闭这个文件,这样就将文件的生命周期与对象生命周期绑定,我们不用显式调用文件的close方法,从而达到对象销毁时自动关闭文件的目的,C++中的std::lock_guard类在管理锁资源时有异曲同工之妙。

魔性的运算符重载

忘记compareTo吧,在C++中你是这样比较字符串大小的。

string a = "cba";
string b = "nba";
if (a > b) puts("a>b");

高效简单地在栈上创建对象

得益于廉洁的内存,现在程序一般有大几MB甚至上十MB的线程栈空间,一般类对象占用内存大小不会超过1K,所以在C++中你可放心在栈上创建小对象与数组,就像下面这个样子。

char arr[100000];        //你没看错,数组长度是10万,没有任何问题

图灵完备的模板元编程

c++的模板元编程能力能在编译期间实现所有算法,下面代码在编译期间计算阶乘。

template <int N> struct fact
{
    const static int value = N * fact<N-1>::value;
};

template <> struct fact<1>
{
    const static int value = 1;
};

//请注意:我是编译期间计算的常量
const static int val = fact<5>::value;

包容一切的function对象

c++11的function对象可以保存函数指针、函数对象、lambada表达式等一切可执行对象,大大方便在接口函数中传入回调方法。

万金油般的auto关键字

C++11拓展了auto关键字的功能,你可以用auto关键字定义变量保存一切函数返回值,而不丢失任何类型信息。是的,Java可以用Object类型保存任何类对象,但Object会丢失原始类型信息,你需要用强制类型转换来恢复原始类型。

vector<int> vec = {1, 2, 3, 4, 5, 6};

for (auto val : vec)
{
    cout << val << endl;
}

auto it = vec.begin();

while (it != vec.end)
{
     cout << *it << endl;
}

强大的宏定义与预处理

C/C++没有定义跨平台ABI,但完全可以通过宏定义控制编译行为,实现源码级别的跨平台。可参考跨平台设置终端颜色的示例代码:https://www.winfengtech.com/compile?path=/app/compile/pub/textcolor.cpp;不仅如此,C/C++编译器还预定义以下宏,用来方便排定位代码。

__FILE__表示当前文件路径

__LINE__表示当前代码行号

__TIME__表示最近编译时间

__DATE__表示最近编译日期

你可以用__DATE__与__TIME__宏来标识程序版本,用__FILE__与__LINE__定位源码位置,在Python、Java中你可能需要借助异常捕获来定位源码文件与行号。

C/C++包含所有面向过程与面向对象编程的完整内容,比如多重继承、运算符重载、静态绑定与动态绑定等,精简语言核心,不提供五花八门的通用类库,给程序员更大的自由度,可谓编程语言中的九阳神功,一通百通,给学习其他编程语言提供加成助力。

最后推荐一个在线C++编译器:https://www.winfengtech.com/compile

转载于:https://my.oschina.net/xungen/blog/3059623

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值