免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 思一克
打印 上一主题 下一主题

[C++] C++的引用的传递和返回兼批判 [复制链接]

论坛徽章:
0
61 [报告]
发表于 2007-05-17 00:11 |只看该作者
想起BS说的:把C++当成一门新的语言....设计上的很多考量不是只看某一个或者几个方面就可以下结论的。
这类讨论语言细节的问题我本不该关注太多的了。

论坛徽章:
0
62 [报告]
发表于 2007-05-17 01:01 |只看该作者
Java中全是引用,因为Java中没有指针的概念,而且Java所有的对象都分布在堆上,不会存在C++中返回

栈局部变量的问题。


引用的好处就是在于"别名"这个特点,必须初始化, 而且只能绑定一次,不需要对引用进行NULL判断,

这些都是对于指针的改进。




指针产生的许多问题,比如指针初始化,野指针,使用空指针等都是许多问题的根源。



其实Java很聪明,所有对象都放在堆上,对象只能用句柄(即引用)进行访问,实在是省掉了C++中许多的

问题。当然,因为java有垃圾回收机制的保证。

所以说学java的三个月的就可以出去找工作,c++三个月只能当玩具,

论坛徽章:
0
63 [报告]
发表于 2007-05-17 09:43 |只看该作者
TO unixpm,

以下JAVA程序的var1, var2是传递引用还是数值?

因为我不懂JAVA,你能否告诉我如何编译(LINUX),我实验一下。



  1. public void badSwap(int var1, int var2)
  2. {
  3.   int temp = var1;
  4.   var1 = var2;
  5.   var2 = temp;
  6. }
复制代码

原帖由 unixpm 于 2007-5-17 01:01 发表
Java中全是引用,因为Java中没有指针的概念,而且Java所有的对象都分布在堆上,不会存在C++中返回

栈局部变量的问题。


引用的好处就是在于"别名"这个特点,必须初始化, 而且只能绑定一次,不需 ...

论坛徽章:
0
64 [报告]
发表于 2007-05-17 12:54 |只看该作者

回复 63楼 思一克 的帖子

呵呵,Java里面的引用只能针对class类型,对于int等原始类型还是值表示的。

你上面那个例子当然是传值的啦。

这里还要补充一点,Java中的引用跟C++中的还是有区别的,其实在Java中一般叫句柄, 句柄其实也是一种类
型(个人认为)

看这个例子

Java Code:

public class Untitled1
{
    public static void main(String[] args)
    {
        String b = "123";

        modify(b);

        System.out.println(b);
    }

    public static void modify(String a)
    {
        a = "789";
    }
}

打印结果: 123

C++ Code :
#include <cstdlib>
#include <iostream>
#include <assert.h>
#include <string.h>
#include <vector>

void test(std::string& a)
{
     a = "789";
}

int main(int argc, char *argv[])
{   
    std::string b = "123";
   
    test(b);
   
    std::cout<<b<<std::endl;
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

打印结果: 789


找个jdk, 先javac  xxx.java 生成 xxx.class文件

             然后java xxx.class就可以运行了

论坛徽章:
0
65 [报告]
发表于 2007-05-17 13:58 |只看该作者

为什么会有人会批判C++中的引用?

两个字: 肤浅!

将引用和指针、地址混为一谈, 不可理解, 如果引用在你的眼中只与地址之类的东西相关联,那完了,你是用不好引用的,引用被你浪费了!不理解一门语言所蕴涵的文化!
在我见过的语言中,C++可以用博大精深来形容!
如果你真正理解了一门语言,你可以发现它是多么的可爱!

论坛徽章:
0
66 [报告]
发表于 2007-05-17 14:08 |只看该作者
关联也没有关系吗。

任何东西人们都有探究其本质和如何实现的倾向。通过这种探究(包括关联,比较,区别等)来深入了解和掌握。

引用不是C++新引进的新技术。而是早期结构化语言共同的方法。

论坛徽章:
0
67 [报告]
发表于 2007-05-17 14:52 |只看该作者
原帖由 思一克 于 2007-5-17 14:08 发表
关联也没有关系吗。

任何东西人们都有探究其本质和如何实现的倾向。通过这种探究(包括关联,比较,区别等)来深入了解和掌握。

引用不是C++新引进的新技术。而是早期结构化语言共同的方法。



不是没有关联,只是版主探索引用本质的方式有问题。
不能由它的实现来推它的本质
最后,都变成了0和1代码,版主能说它们的本质都是一样的吗?

论坛徽章:
0
68 [报告]
发表于 2007-05-17 15:20 |只看该作者
TO ypxing,

比如对与编译的语言的运行程序,你用PASCAL,FORTRAN或C写的,看反汇编可以区别他们。

通过汇编,可以精确了解高级语言某功能的实现和效率,等等许多。

论坛徽章:
0
69 [报告]
发表于 2007-05-17 15:24 |只看该作者
原帖由 思一克 于 2007-5-17 15:20 发表
TO ypxing,

比如对与编译的语言的运行程序,你用PASCAL,FORTRAN或C写的,看反汇编可以区别他们。

通过汇编,可以精确了解高级语言某功能的实现和效率,等等许多。


你说的很对,可以了解它们的实现和效率
但是不能反推它们的本质
本质东西还是需要从C++引进它们的本意和语义来考量的

论坛徽章:
0
70 [报告]
发表于 2007-05-17 17:22 |只看该作者
好N的帖,留个名儿,呵呵

感觉争论双方心里都有点气
不利于交留和学习
心里还堵的跟我一起深呼吸:
大口吸气,吸----------------------------------------------------------------------------------
大品呼气,呼----------------------------------------------------------------------------------

'{'
好点儿没?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP