C 的局限性

0x01 符号重载

符号符号重载是一种强大的机制, 它允许修改一个操作符的含义, 当看到加号时, 有时候代表加法运算, 有时代表将字符串连接起来其他的含义。 所以和具体的语义与使用场合有很大的关系。 如:

Matrix a,b,c;
c = a+b;

这里的加号表示矩阵的加法, 而不是整数或者浮点数的加法。

0x02 模板

遇到类似这样的问题, 比如: 比较两个数的大小, 其函数原型为 :

int max(int a, int b);

如果还要比较两个双精度的大小, 还得再写一个新的函数。 比如:

int max(double a, double b);

如果又需要写比较两个字符串的大小呢? 那么需要写第三个函数。 也许, 我们会想到使用 typedef 。 比如:

typedef int item;

item max(item a, item b)
{
    if(a > b)
        return a;
    else
        return b;
}

如果需要使用多个不用版本的 max 函数, 则使用 typedef 无法满足要求, 因为程序只能为 item 定义一种数据类型。

解决以上问题的一种灵活的机制是使用模板函数, 在函数实现的任何地方, item 都不会受到受限于任何特定的类型。 当使用模板函数时, 编译器在检查参数的类型时, 自动确定 item 的数据类型。 比如:

template <class Item>
item max(item a, item b)
{
    if(a > b)
        return a;
    else 
        return b;
}

表达式 template 称为模板前缀, Item 称为模板参数。 模板前缀总是在模板函数定义的前面, 它提醒编译器: 下面的定义将使用名为 Item 的未确定的数据类型。 事实上, 模板前缀表明 – Item 是一种将来要填充的数据类型, 现在不用担心它, 只在函数内部使用。

C 语言既有它的优势也有它的不足之处, 而使用 C++ 具有更大的威力。 事实上, 嵌入式系统软件的开发不仅可以用 C 语言, 同样可以使用 C++ 。 例如单片机在 keil 下也是可以使用 C++ 进行开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值