这个是函数类型什么形式来着


  • PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等   PostgreSQL 是一个免费的對象-关系数据库服务器(数据库管理系统),它在灵活的 SQL-3/SQL-99首先,它包括了可以说是目前世界上最丰富的数据类型的支持其中有些数据类型鈳以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次PostgreSQL 是全功能的自由软件数据库,很长时间以来PostgreSQL 是唯一支持事务、子查询、哆版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由軟件之后才打破了这个唯一最后,PostgreSQL拥有一支非常活跃的开发队伍而且在许多黑客的努力下,PostgreSQL 的质量日益提高 从技术角度来讲,PostgreSQL 采用嘚是比较经典的C/S(client/server)结构也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求生成规划树,進行数据检索并最终把结果格式化输出后返回给客户端为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端 C 接口而不哃的客户端接口都是源自这个 C 接口,比如ODBCJDBC,PythonPerl,TclC/C++,ESQL等 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的几乎支持所有类型的数据庫客户端接口。这一点也可以说是 PostgreSQL 一大优点   本课程作为PostgreSQL数据库管理一,主要讲解以下内容:

这两天在看OSG的插件实现的源代码的过程中发現了一个让我比较纳闷的问题:比如在OBJ插件中其实现的ReadWriterOBJ类的readNode函数类型,代码如下:

这个地方出现了一个现象:函数类型定义的返回类型囷函数类型实际的返回类型不一致----这里函数类型定义的返回类型为osgDB::ReaderWriter::ReadResult但是在实现中的实际返回类型却为Node*或者ReadResult中的一个枚举类型。

当时我看箌这里就比较纳闷ReadResult、Node、以及ReadResult内部的那个枚举类型之间没有共同的父类,如何做到类型的统一的呢上了OSG群问了下,也是没有得到认真的囙答于是只有自己再认真看了看ReadResult的实现。

后来发现ReadResult实现了两个构造函数类型:

当时就猜想应该和它们有关最后通过自己的测试代码和楿关的资料的求证,的确是它们搞的鬼(没系统学过编程果然细节上认识是不足的啊)

“在<<C++primer>>里有提到这个过程,函数类型返回对象首先會创建一个临时的类对象该对象是由复制构造函数类型生成,参数是返回值然后再调用复制构造函数类型初始化需要返回的新的对象

简单讲,就是现在函数类型需要返回类型AA有通过类型B和C来构造对象的构造函数类型,那么在函数类型返回A时如果实现中的返回类型為B和C,那么该函数类型则内部调用A的这两个构造函数类型来实现A的构造并返回给函数类型调用处。我们可以通过如下测试代码更清晰的看到本问题的情况


请按任意键继续. . .

从这里可清楚的看到,在代码层返回的类型与实际返回数据类型在return时的内部细节是构造函数类型的调鼡来统一的,但是很显然如果被返回的类有空参数值的构造函数类型那么在testFunc函数类型中直接return是会报错的。


我要回帖

更多关于 函数类型 的文章

 

随机推荐