学习
实践
活动
专区
工具
TVP
写文章

CC++的二等公民

原来的C语言中,enum、const、auto等关键字都不尽完善,并没有发挥应有的功能,是二等公民,而随着时间的推移,C++他们都被完善了,有些还被赋予了新的功能,担当起了重要的角色。 相反,原本成员称王称霸的一等公民,比如macro宏,C++成了贱民,惨遭抛弃。下面我们来仔细看看各种情况。 2,const C语言标准,const关键字的作用被描述为模棱两可的“只读变量”的意思,使用const修饰的变量无法再次赋值,但却又不被认为是常量(比如无法case语句总使用),因此单独使用const C++函数都可以重载,函数本身使用const来修饰,或者某个参数使用const来修饰,都能使得函数的特征标发生改变,从而可以被重载,比如在每个类A,可以定义两个重载的成员方法: void A:: 4,#define C语言中,尤其Linux内核代码称王称霸的宏定义,C++不受待见,虽然宏运行速度快,但由于其他的诸多缺点,功不抵过,最终还是被抛弃,被const常量、inline函数等替代

49720

Lua函数式编程

接着你就会问:“什么是函数式编程,什么是面向对象编程?” 会有很多人告诉你:“函数式编程语言中,函数一等公民面向对象编程,万物皆对象”。 tc.a = "foo"; TestClass.foo_t cb = tc.bar; cb(); } }} 再来看看函数式编程范式中一等公民的定义 :"如果一个语言支持将函数作为参数传入其他函数,将其作为值从其他函数返回,并且将它们向变量赋值或将他们存储在数据结构,就在这门语言中,函数一等公民。 我认为对于有C/C++背景的人来讲,这不足以解释函数式编程的特点。 因为C/C++语言中,函数指针同样可以做到上述所有的事情。 函数式编程范式,所有的逻辑交互均是以函数(闭包)为主体来运行。 每一个函数会携带自身所需的环境变量,以便在任何需要执行的地方执行。

51820
  • 广告
    关闭

    新年·上云精选

    热卖云产品新年特惠,2核2G轻量应用服务器9元/月起,更多上云必备产品助力您轻松上云

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Go 语言的函数是“一等公民”?

    01 介绍 Go 语言中,函数被称为“一等公民”。实际上,在其它编程语言中,也有此说法,例如 JavaScript。 什么是编程语言的“一等公民”? “一等公民”的特性是可以存储变量,可以作为参数传递给函数,可以函数创建并作为返回值从函数返回。 本文我们介绍一下 Go 语言的函数是否符合“一等公民”的特性。 02 存储变量 Go 语言的函数可以作为变量的值,存储变量。 04 可以函数创建,并作为返回值 Go 语言的函数可以函数创建,并作为返回值从函数返回。 关于自定义函数类型和闭包,我们之前的文章已经介绍过,限于篇幅,本文不再赘述,感兴趣读者朋友们,可以翻阅一下之前的文章。 参考资料: https://wiki.c2.com//?

    33820

    Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?

    这些语言的使用者接触 Python 时,可能会疑惑为什么它不提供 ++ 或 -- 的操作呢?我前不久发的《Python的十万个为什么?》里,就有不少同学调查问卷中表示了对此话题感兴趣。 C 的 i 与 Python 的 1000,它们则寄生在底层的内存空间上…… 还可以这样理解:C 的变量 i 是一等公民,数字 1000 是它的一个可变的属性;Python 的数字 1000 是一等公民 有了以上的铺垫,我们再来看看i++,不难发现: C 之类的语言,i++ 可以表示 i 的数字属性的增加,它不会开辟新的内存空间,也不会产生新的一等公民 Python 之类的语言,i++ 如果是对其名称属性的操作 ,那样就没有意义了(总不能按字母表顺序,把 i 变成 j 吧);如果理解成对数字本体的操作,那么情况就会变得复杂:它会产生新的一等公民 1001,因此需要给它分配一个内存地址,此时若占用 1000 的地址 稍微小结下:Python 不支持自增操作符,一方面是因为它的整数是不可变类型的一等公民,自增操作(++)若要支持,则会带来歧义;另一方面主要因为它有更合适的实现,即可迭代对象,对遍历操作有很好的支持。

    1K30

    我揭开了「对象」的神秘面纱,就这?

    一、面向过程 VS 面向对象 为什么 C 叫面向过程(Procedure Oriented)的语言,而 Java、C++ 之类叫面向对象(Object Oriented)呢? 我们都知道函数 C/C++、Java 这类语言中都不是一等公民一等公民的意思就是能够像其它整数、字符串变量一样,可以被赋值或者作为函数参数、返回值等。 但是 JS、Python 这类动态语言中,函数却是一等公民,可以作为参数、返回值等等。 究其原因,这类语言底层实现,一切东西皆是对象,函数、整数、字符串、浮点数都是对象,函数才因此具备同其它基本类型一样的一等公民的身份。 但是! C/C++ 函数虽然是二等公民, 但我们可以通过函数指针来变相的实现将函数用于变量赋值、函数参数、返回值场景。 三、函数指针是啥?

    29510

    python万物皆对象实现机制(进阶必看)

    那么问题来了,那么为什么大家都说python是更加彻底的面对对象呢,它到底彻底在哪里? 它与其他编程语言的不同 python函数和类也是对象,属于python的一等公民。 这些一等公民也就是对象具有以下几个特性: 可以赋值给一个变量 可以添加到集合对象 可以作为参数传递给函数 可以当做函数的返回值 实现原理 静态语言中将类加载到内存运行的时候,类是不可修改的,因为已经编译完成 一个魔法函数的栗子 魔法函数的效率 这里用__len__函数来举例 len魔法函数,python内置类型(int list dict)底层均为c语言写的,需要用cython解释器去执行,所以长度一开始分配内存空间的时候就已经确定了 总结 / 2022.5.3 python,面对对象是用魔法函数的机制实现的,它给我们编程带来了极大的灵活性。 在其他静态语言中,我要实现多态,我需要定义一个抽象类(接口),然后继承这个类。 python没有多态的意思是,其实这个概念在python可以不存在,java这种静态语言中 一个类实例化的时候才能知道具体是实现什么子类的情况下,我们最开始将这个类指向其父类,等到具体的时候再指向实际的子类

    10750

    JavaScript深入浅出第2课:函数一等公民是什么意思呢?

    摘要: 听起来很炫酷的一等公民是啥? 《JavaScript深入浅出》系列: JavaScript深入浅出第1课:箭头函数的this究竟是什么鬼? 例如,字符串几乎所有编程语言中都是一等公民,字符串可以做为函数参数,字符串可以作为函数返回值,字符串也可以赋值给变量。 对于各种编程语言来说,函数就不一定是一等公民了,比如Java 8之前的版本。 对于JavaScript来说,函数可以赋值给变量,也可以作为函数参数,还可以作为函数返回值,因此JavaScript函数一等公民函数作为函数返回值 通常来讲,函数的返回值比较简单,比如数字、字符串、布尔值或者Object。由于JavaScript函数是第一公民,因此我们也可以函数返回函数。 但是这只是一个简单的示例,一些复杂的实际场景函数返回函数还是很有用的。下面给大家一个简单的示例。

    47530

    Python 闭包概念的条分缕析

    闭包(closure)便是一个这样牵扯了许多上下文的概念,包括编程语言最基本的绑定(binding),环境(environments),变量作用域(scope)以及函数是第一等公民(function as First-Class Function(函数是第一等公民) 一般来说,组成编程语言的元素,如变量、函数和类,会被设定不同的限制,而具有最少限制的元素,被我们称为该编程语言中的一等公民。 而一等公民最常见的特权有: 可以被绑定到名字上 可以作为参数函数传递 可以作为返回值被函数作为结果返回 可以被包含在其他数据结构 套用到 Python 函数,即一个函数可以被赋值给某个变量,可以被其他函数接收和返回 使用函数作为第一等公民的做法,我们成为函数式编程。在这个大数据时代,由于对并发的友好性,传统过程式语言(比如 Cpp、Java)都在新版本上逐渐支持函数式编程范式。 ,那么调用返回的内部函数(add5)的时候,能够引用到其(add)定义时的外部环境(例子,即 a 的值)。

    15610

    Python,数据结构,神经网络-面经

    目录 人工神经网络为什么ReLu要好过于tanh和sigmoid function? MLE的解是否总是存在,若存在是否唯一? L1用于逻辑回归,C 值从 0 增加至非常大会有什么变化? Python 生成器与迭代器的区别 解释Python函数为什么可当作参数用? 利用分治算法进行归并排序的一般步骤? (Python函数面试类型) Datawhale优秀回答者@把栏杆拍遍 python函数是第一等对象,第一等对象的一般特征: 1.运行时(runtime)创建 2.将变量或者元素赋值一个数据结构当中 3.可以作为一个参数传递给一个函数 4.可以作为函数的结果返回 Python对象才是一等公民,一切都是对象,int是对象,函数是对象,class 也是一种对象。 Python支持了一些函数式特性,但并不是个以函数为核心的语言,函数也不是一等公民。因为函数式编程并不很Pythonic。

    25050

    面经系列 | Python,数据结构,神经网络

    目录 人工神经网络为什么ReLu要好过于tanh和sigmoid function? MLE的解是否总是存在,若存在是否唯一? L1用于逻辑回归,C 值从 0 增加至非常大会有什么变化? Python 生成器与迭代器的区别 解释Python函数为什么可当作参数用? 利用分治算法进行归并排序的一般步骤? (Python函数面试类型) Datawhale优秀回答者@把栏杆拍遍 python函数是第一等对象,第一等对象的一般特征: 1.运行时(runtime)创建 2.将变量或者元素赋值一个数据结构当中 3.可以作为一个参数传递给一个函数 4.可以作为函数的结果返回 Python对象才是一等公民,一切都是对象,int是对象,函数是对象,class 也是一种对象。 Python支持了一些函数式特性,但并不是个以函数为核心的语言,函数也不是一等公民。因为函数式编程并不很Pythonic。

    49350

    Python不支持 i ++ 语法的原因解析

    简要讨论为什么它不提供++作为运算符 ? 正常情况下,当有人问起++原因而不是Python的运算符时,这一行引起了我的注意。 诸如C之类的语言首先找到存储i地址的值,然后将其加1。 操作后,新值将替换旧值 Python的操作过程是将i指向的数字加1,然后,将结果绑定到新应用的存储空间,然后将名称标签”粘贴”到新数字。 所以我C语言中与Python的1000相同 综上所述,让我们看一下i ++,不难发现: C之类的语言中,i ++可以表示i的数值属性的增加,既不会打开新的内存空间,也不会创建新的一等公民 像Python 它将生成一个新的一等公民1001,因此需要为其分配一个内存地址。 如果此时占用的地址为1000,则将涉及旧对象的回收,并且与1000的原始引用关系也将受到影响。 摘要 Python不支持递增运算符,原因如下: 因为它的整数是一类不变的一等公民,所以如果要支持增量运算(++),将会带来歧义 含糊不清的原因:本故事 主要是因为它具有更合适的实现,即迭代对象,它对遍历操作具有良好的支持

    33831

    深入理解 Java 的 Lambda

    在这篇文章,我想提供一个自下而上的解释,从其他已建立的Java概念推导出Lambdas的概念。 首先介绍下方法的类型化,这是支持方法作为一流公民的先决条件。 方法类型 从Java 8起方法就是一等公民了。按照标准的定义,编程语言中的一等公民是一个具有下列功能的实体, 可以作为参数进行传递, 可以作为方法的返回值 可以赋值给一个变量. Java,每一个参数、返回值或变量都是有类型的,因此每个一等公民都必须是有类型的。 ; } static void write(OneStringArgumentInterface writer, String msg) { writer.apply(msg); } 最终函数一等公民 实现map 诸多高阶函数,map是最经典的. map的第一个参数是函数,该函数可以接收一个参数并返回一个值;第二个参数是值列表. map使用传入的函数处理值列表的每一项,然后返回一个新的值列表。

    33720

    如何理解 Go函数一等公民

    接触Go这么语言,可能你经常会听到这样一句话。Go语言中,函数属于一等公民,你可能很费解,什么是一等公民。是因为函数的优先级很高吗?如果是又是怎样的优先级呢? 本文将分享Go语言中函数一等公民的真正面纱。 什么是函数 了解一等公民之前,先普及一下函数基础知识。 (返回类型...) { return 返回值... } Go语言中,函数可以分配给一个变量,可以作为函数的参数,也可以作为函数的返回值。这样的行为就可以理解为函数属于一等公民第 8 行定义了一个匿名函数,紧接着函数定义之后,我们使用第10行("()")调用该函数第 12 行的 main 函数,我们创建了一个匿名函数,其签名与函数的参数匹配。我们在下一行调用 and 传递作为参数。

    7610

    Kong网关 入门、实战与进阶

    开放平台的引入必然涉及客户应用接入、API权限管理、调用次数管理等多项功能的完善 表16 功能 Kong服务器的架构设计 高扩展性:用户可以通过简单地向Kong集群添加更多服务器实现横向扩展,这意味着用户面对超大流量时可以轻松应对 当一切准备就绪后,使用kongstartckong.conf命令启动Kong服务,浏览器输入http://127.0.0.1:8001可以查看服务是否启动成功 程序清单17 config.yml配置文件 C\C++应用程序与Lua语言结合完美地平衡了性能和灵活性,这也正是Kong网关能够提供高性能和高度定制化插件的基础 LuaJIT解释器的执行效率为Lua解释器执行效率的10倍以上 程序设计语言中的一等 、二等、三等公民 一等公民:可以作为参数传递,也可以从子程序返回,还可以赋值给变量 二等公民:可以作为参数传递,但是不能从子程序返回,也不能赋值给变量 三等公民:值作为参数传递都不行 此处再多做一下引申 ,函数为“一等公民”是函数式编程的基础 用户数据分为两类:完全用户数据,指由Lua管理的内存对应的对象;轻量用户数据,指简单的C指针 Lua,用户数据除了赋值与相等性判断之外,没有其他预定义操作 线程类型表示一个独立的执行序列

    92530

    Python的闭包和装饰器

    来看下维基上的解释: 计算机科学,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数通过Python的语言介绍一下,一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包。你调用函数A的时候传递的参数就是自由变量。 另外再说一点,闭包并不是Python特有的概念,所有把函数做为一等公民的语言均有闭包的概念。不过像Java这样以class为一等公民的语言中也可以使用闭包,只是它得用类或接口来实现。 nonlocal 语句 python 的函数内,可以直接引用外部变量,但不能改写外部变量,因此如果在闭包中直接改写父函数的变量,就会发生错误: python 2 可以函数内使用 global 语句,但全局变量在任何语言中都不被提倡,因为它很难控制,python 3 引入了 nonlocal 语句解决了这个问题: Nonlocal 与 global 的区别在于 nonlocal 语句会去搜寻本地变量与全局变量之间的变量

    27140

    关注

    腾讯云开发者公众号
    10元无门槛代金券
    洞察腾讯核心技术
    剖析业界实践案例
    腾讯云开发者公众号二维码

    相关产品

    • 数据库

      数据库

      腾讯云数据库(TencentDB)是腾讯提供的高可靠、高可用、可弹性伸缩的云数据库服务产品的总称。可轻松运维主流开源及商业数据库,它更拥有容灾、数据传输服务、安全服务、灾备和智能 DBA 等全套服务。 可提供于电商、金融、游戏、互联网等不同场景完美的解决方案。

    相关资讯

    热门标签

    活动推荐

    扫码关注腾讯云开发者

    领取腾讯云代金券