LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 999|回复: 7

C++ [1>返回结构与原型问题.2>小概念.]

[复制链接]
发表于 2003-7-25 13:58:38 | 显示全部楼层 |阅读模式
1>

声明:sysop为一结构类型.
sysop & clone (sysop & sysopref)
{
sysop * psysop = new sysop;
* psysop = sysopref;
return * psysop;
}

"*psysop"为一个"sysop"结构类型的对象,而函数返回类型为" sysop &"(即sysop结构类型的引用)这样实际返回的"*psysop"会不会与函数要求返回的"sysop &"类型不一样而是一个错误呢?

运用: sysop & jolly = clone (looper);
意味着一个引用赋值给另一个另用变量?等价于"可将一个引用的引用赋给另一个引用?是这样理解吗?


2>

隐式实例化,显式实例化,显式具体化.这三个我觉得都是从模板变出来的.或者以模板为本质.为什么要这三个不同的概念呢?它们不都可以从模板来实现吗?
能讲讲为什么要有它们三个存在吗?我觉得只要一个模板就可以了呀!
发表于 2003-7-25 17:36:26 | 显示全部楼层
1.类型是匹配的,其实你可以把引用当作别名来理解,他们指向的是同一块内存空间。在你的这个例子中,*psysop 类型其实就相当于sysop,因为可以这样赋值:sysop temp1 = *psysop; 而对于一个引用来说,也可以这样:sysop & temp2 = temp1; 由此看来他们的类型是一致的。他们都是psysop所指向空间的内容。

2.没有听过这三个名词,能说出他们的英文吗?或许译法不一样
 楼主| 发表于 2003-7-25 22:18:51 | 显示全部楼层
隐式实例化:    implicit instantiation
显式实例化:    explicit instantiation
显式具体化:    explict  specialization
这三个统称为具体化.

另:运用: sysop & jolly = clone (looper);
意味着一个引用赋值给另一个另用变量?等价于"可将一个引用的引用赋给另一个引用?是这样理解吗?
发表于 2003-7-25 22:47:22 | 显示全部楼层

回复: C++ [1>返回结构与原型问题.2>小概念.]

最初由 Andy84920 发表
1>

声明:sysop为一结构类型.
sysop & clone (sysop & sysopref)
{
sysop * psysop = new sysop;
* psysop = sysopref;
return * psysop;
}

这个函数看来很奇怪呀。一般不会在函数中分配内存并返回引用。完全可以用复制构造函数或者重载运算符“=”来代替。
发表于 2003-7-25 23:02:07 | 显示全部楼层

回复: C++ [1>返回结构与原型问题.2>小概念.]

最初由 Andy84920 发表
1>
"*psysop"为一个"sysop"结构类型的对象,而函数返回类型为" sysop &"(即sysop结构类型的引用)这样实际返回的"*psysop"会不会与函数要求返回的"sysop &"类型不一样而是一个错误呢?

不会。编译器会将实际的变量名转换成引用。
  
运用: sysop & jolly = clone (looper);
意味着一个引用赋值给另一个另用变量?等价于"可将一个引用的引用赋给另一个引用?是这样理解吗?

不对。这个函数是在复制对象。
发表于 2003-8-5 23:28:48 | 显示全部楼层
1、函数clone有违《Effective C++》第31条,应尽量避免。
发表于 2003-8-6 00:01:55 | 显示全部楼层
2、隐式实例化、显式实例化是指在调用模板的时候,根据类型或值构造出独立的函数或类的过程。比如:
template <typename T>
void foo(T t){}

int a;
foo(a);//隐式实例化,相当于foo<int>(a);
foo<double>(a);//显式实例化

显式具体化,有时我们需要针对特定的数据类型做一些与类型相关的操作或是优化,通用模板的实例化显然不能帮助我们(所有类型都是同一种操作),因此就必须借助显式具体化:
//针对int类型特化
template<>
foo<int>(int t)
{t++;}

foo<int>(a);//调用特化的版本
foo<float>(a);//调用float实例化后的版本

以上是我的理解,请各位高手指正。
发表于 2005-11-19 20:00:31 | 显示全部楼层
看C++ primer来得吧,我看这里也有疑问!哈哈,一样的疑问。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表