首页 > 编程知识 正文

const怎么用(const在c语言中)

时间:2023-05-05 15:49:52 阅读:102160 作者:1197

前言

最近在讲STL算法的时候,犯了一个有趣的错误。我在讲STL中的绑定函数的时候出现了一个莫名其妙的错误。在库中使用模仿函数没有问题,但是在使用我为绑定调用编写的模仿函数时出现了一个莫名其妙的问题。今天就和大家分享一下,希望对大家有帮助。首先,了解以下预知识:

模仿函数绑定函数

仿函数

C STL中的很多算法都是和模仿函数结合使用的,主要用于数据的排序准则和批量处理。

模仿函数:让班级模仿函数调用的方式。我们以排序排序算法为例。有以下代码:

图书馆的排序标准是所谓的模仿功能。其实模仿函数只需要重载()运算符,lessint小于从小到大排序,greaterint大于从大到小排序。其实我们也可以自己实现这样的模板类和模仿函数。比如把库中的模仿函数:替换成自己编写的模仿函数。

捆绑函数

bind 1st bind 2nd bind 2nd bind right操作数假设有一个函数int sum(int i,int j)。当使用绑定函数时,我们可以限制I和j的值,这是通过绑定函数实现的。

Bind1st定义I参数bind2nd定义J参数,具体情况参考案例:

Count_if:条件统计,ab的重载操作在更大的范围内,过滤的元素数为4,因为bind2nd将B固定为4。

错误展示

出现以下错误:(一些错误数据显示存在许多完整性问题)

错误c 20393360“first _ argument _ type”:不是“compareLessint”的成员

参见对正在编译的类模板的实例化的引用“STD :3360 binder第二个比较器”

错误:缺少“,”(在标识符“first_argument_type”之前)

" first _ argument _ type" :未声明的标识符

" result _ type" :不是" compareLessint "的成员

错误:缺少“,”(在标识符“result_type”之前)

“result _ type”:未声明的标识符

“STD : Unary _ function”:模板的参数太多。

参见std:unary一元函数的语句。

错误c 2955:“STD :3360 Unary _ function”:需要模板参数列表才能使用类模板。

参见std:unary一元函数的语句。

错误C2146:语法错误3360缺少“,”(在标识符“first_argument_type”之前)

1d: 软件 VC include x functional(490):错误c 20653360“first _ argument _ type”:未声明的标识符

1d: 软件 VC include x functional(491):错误c 20393360“result _ type”:不是“compareLessint”的成员

1d: 软件 VC include x functional(491):错误C21463360语法错误3360缺少“,”(在标识符“result_type”之前)

1d: 软件 VC include x functional(491):错误c 20653360“result _ type”:未声明的标识符

1d: 软件

vcincludexfunctional(491): error C2977: “std::unary_function”: 模板 参数太多 1> d:softwarevcincludexstddef(126) : 参见“std::unary_function”的声明 1>d:softwarevcincludexfunctional(492): error C2955: “std::unary_function”: 使用 类 模板 需要 模板 参数列表 1> d:softwarevcincludexstddef(126) : 参见“std::unary_function”的声明 1>d:softwarevcincludexfunctional(493): error C2955: “std::unary_function”: 使用 类 模板 需要 模板 参数列表 1> d:softwarevcincludexstddef(126) : 参见“std::unary_function”的声明 1>d:softwarevcincludexfunctional(495): error C2039: “second_argument_type”: 不是“compareLess<int>”的成员 1>d:softwarevcincludexfunctional(495): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 1>d:softwarevcincludexfunctional(495): error C2143: 语法错误 : 缺少“,”(在“&”的前面) 1>d:softwarevcincludexfunctional(513): error C2039: “second_argument_type”: 不是“compareLess<int>”的成员 1>d:softwarevcincludexfunctional(513): error C2146: 语法错误: 缺少“;”(在标识符“value”的前面) 1>d:softwarevcincludexfunctional(513): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

然后用类去继承,依然会出现问题如下问题:

报错如下:

error C3848: 具有类型“const compareLess<int>”的表达式 会丢失一些 const-volatile 限定符以调用“bool compareLess<int>::operator ()(T,T)”

这个问题搞了10来分钟没搞定,最终的问题其实很出乎意料,通过观察 std::unary_function类发现问题只是因为缺少一个const修饰成员函数而出错。

尾言

文章都是手打原创,每天最浅显的介绍C语言、C++,windows知识,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

《C语言51课视频教程合集》

《C++45课视频教程》

如果足下基础比较差,不妨关注下人人都可以学习的视频教程,通俗易懂,深入浅出,一个视频只讲一个知识点。视频不深奥,不需要钻研,在公交、在地铁、在厕所都可以观看,随时随地涨姿势

最后大家在学习C++泛型编程的时候有哪些有趣的错误呢?都可以在评论区留下足迹哦!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。