![]() |
1
1
实际上,“指针是fco”和“指针不是fco”都是正确的。我们需要在各自的上下文中使用这些语句。(fco-一级对象) 当我们讨论C++中的“指针”时,我们讨论的是一种数据类型,它存储了其他数据的地址。现在,这是否是FCO,实际上取决于我们如何设想使用它。不幸的是,对于C++中的指针来说,使用语义不是内置的。 如果我们只使用指向数据的指针,那么它将满足成为一个FCO的要求。但是,如果我们使用一个指针“保留”一个数据,那么它就不能再被视为一个FCO,因为它的复制和分配语义不起作用。这样的“资源处理”指针(或更直接地称为“原始指针”)是我们在智能指针研究环境中的兴趣所在。这些不是FCO,而相应的智能指针是。相比之下,仅仅跟踪指针将继续满足FCO的要求。 以下段落从《现代C++设计》一书中很好地阐明了这一点。 我引用了智能指针一章:
我希望这能澄清。 |
![]() |
2
3
维基百科中“一流”的定义是错误的。在编程语言中,如果一个实体不需要编译器进行任何特殊处理,并且可以像语言中的任何其他对象一样被解释、理解、使用等,那么它就被认为是“一流的”。C++中的指针不是第一类对象的原因是
所有对象都是一流的语言的一个好例子是Python。在python中,所有东西都有某种类型的关联,它可以被视为一个对象,它可以有成员、函数等。作为一个极端的例子,甚至python中的函数都是只包含代码的对象,并且恰好可以被调用;实际上,如果您试图使用一个普通函数将返回函数包装器(从而不必把函数视为特殊情况)。甚至可以像向其他对象那样向函数添加成员。下面是这样一个例子: >>> def f(x): ... return x; ... >>> func = f; >>> print f.__class__ >>> print f(5) 5 >>> print f.__call__(5) 5 >>> f.myOwnMember = "Hello world!" >>> print f.myOwnMember Hello world! 我为C++中的Python表示歉意,但是没有对比就很难解释这个概念。 |
![]() |
3
2
维基百科的文章很糟糕(我曾经同意“需要引用”),但你没有遗漏任何东西:根据维基百科的定义,也根据任何理智的定义, 原始C++指针是第一类对象 . 如果有人愿意自愿帮助我通过谷歌学者进行一些搜索,我真的很想看到维基百科的文章被修复。我是一个主题专家,但我也非常忙,我很想有一个合作伙伴来解决这个问题。 |
![]() |
4
1
正如迈克所说,这里的“对象”这个词似乎有点混乱。你的朋友好像在“第一类对象”和“C++类的实例”这两个对象之间混淆,这两个非常不同的地方,Word对象被用于两个完全不同的事物。 在面向对象的编程中,object这个词用于描述一些数据结构,收集数据字段和操作它们的方法。用C++在类中定义它们,获取继承等。 另一方面,在表达“第一类对象”时,“对象”一词的含义更为广泛,不局限于面向对象语言的对象。一个整数可以作为一类对象,指针也可以。我相信,“其他对象”的另一个含义并没有真正地作为C++中的第一类对象(他们在其他面向对象编程语言中使用),因为它们对参数传递有限制(但可以传递指针或引用给它们,差异不太大)。 然后,事情与你朋友所说的完全相反:指针是第一类对象,而不是C++类的实例,智能指针是C++类的实例,而不是第一类对象。 |
![]() |
5
1
从 wiki :
我在维基百科中加入了整个条目以供参考。根据这个定义——一个可以作为参数传递的实体——C++指针将是一个第一类对象。 支持参数的其他链接: catalysoft wapedia 重新确认 :指使某物成为一流物体的过程(技术、机制)。 |
![]() |
Sudhanva c · 如何提高编码技能?[已关闭] 7 年前 |
![]() |
hoffm · 为什么Ruby找不到调用方类中定义的常量? 7 年前 |
![]() |
Thamme Gowda · “lambda”关键字的较短替代项? 8 年前 |
![]() |
AlphaModder · 有没有带有“不寻常”访问修饰符的编程语言? 10 年前 |
|
lucasasecas · 有可能静态地使用动态语言吗? 10 年前 |
|
Eugenio Laghi · 仅由括号、加号和感叹号组成的语言 10 年前 |
![]() |
dallin · 数组中的逗号运算符是否有名称? 11 年前 |