回首页 回首页 ◎ 设为首页  
◎ 收藏本站  
◎ 给我留言  
  
  首 页  C/C++教程  C++之父的FAQ  C/C++动向  C/C++源代码  C/C++误区  Unix/Linux  下载中心  乱七八糟  蚂蚁的Blog  
  当前位置:首 页 >> C++之父的FAQ >> C++ 风格与技术 FAQ >> [翻译] 我应该使用按值传递还是按引用传递?
最 近 更 新
[转] 我该把const写在类..
[翻译] 我应该使用按值..
[翻译] 你如何命名变量..
[转] 何种代码布局风格..
[转] “int* p;”和“in..
[翻译] “cout”怎么念?
[转] 宏有什么不好吗?推荐
[翻译] static_cast 有..推荐
[翻译]为何C++里有些东..推荐
[翻译] i++ + i++ 的值..推荐
最 新 推 荐
[转] 宏有什么不好吗?推荐
[翻译] static_cast 有..推荐
[翻译]为何C++里有些东..推荐
[翻译] i++ + i++ 的值..推荐
[翻译] 数组有何不好之..推荐
[转] 为何delete操作不..推荐
[转] 有placement delet..推荐
[翻译] “new”和“mall..推荐
[转] C和C++风格的内存..推荐
[翻译] 为何标准容器效..推荐
热 门 排 行
[转] 我可以写“void ma..
[翻译] 什么是纯虚函数?
[转] 这个简单的程序…..推荐
[转] 我如何从标准输入..
[翻译] i++ + i++ 的值..推荐
[转] 我该把const写在类..
[转] 我怎样才能把整数..
[转] 我应该怎样处理内..推荐
[转] 宏有什么不好吗?推荐
[翻译] static_cast 有..推荐
站 内 搜 索

Web stdcpp.cn
关键词

搜索方式

搜索范围

精确匹配
广 告

[翻译] 我应该使用按值传递还是按引用传递?


来源:蚂蚁的 C/C++ 标准编程 作者:Bjarne Stroustrup 翻译:antigloss 等级:精品
发布于2007-09-23 14:25 被读685次 【字体:

    这取决于你到底想达到什么目的:

  • 如果你想改变被传递的对象,那就按引用传递或者使用指针;例如 void f(X&); 或者 void f(X*);
  • 如果你并不想改变被传递的对象,但该对象很大,那就按常量引用传递;例如 void f(const X&);
  • 其它情况则应该按值传递;例如 void f(X);
    我所说的“大”为何解?任何超过两个字长的对象。

    我为何会想改变参数的值?呃,通常我们不得不这样做,但通常我们也可用另一种方法:产生一个新的值。例如:

                void incr1(int& x); // increment
                int incr2(int x); // increment

                int v = 2;
                incr1(v); // v becomes 3
                v = incr2(v); // v becomes 4

    我认为对于代码的阅读者来说,incr2() 更易于理解。亦即,incr1() 更易于导致误解和错误。因此,只要创建和复制一个新的值的开销并不“昂贵”,我更喜欢返回新值这种风格,而非那种修改值的风格。

    我的确想修改参数的值,那么我应该使用指针还是引用?对此我并没有雄厚的符合逻辑的理由。如果传递“非对象”(例如空指针)是可接受的,那么使用指针是个不错的选择。我的个人风格是,当我想要改变对象的时候,我会使用指针,因为某些情况下,这样更易于看出是否潜在对象被修改的可能性。

    注意,调用成员函数本质上就是对对象进行按引用传递,所以,当我们想要改变对象的值/状态的时候,往往会使用成员函数。

原文地址http://www.research.att.com/~bs/bs_faq2.html#call-by-reference

本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 Bjarne Stroustrup 翻译:antigloss 共同所有,转载请注明原作者和出处。谢谢。



相关专题:C++ 之父的言论
[转] 我该把const写在类型前面还是后面?
[翻译] 你如何命名变量?是否推荐匈牙利命名法?

上一篇:[翻译] 你如何命名变量?是否推荐匈牙利命名法?
下一篇:[转] 我该把const写在类型前面还是后面?

共有评论 0 条 网友评分 0分 查看全部评论

查看全部评论

【发表评论】 评分:1分 2分 3分 4分 5分


验证码:

Powered By Www.Xydw.COM Ver1.14 管理
Copyright © 2005-2006 蚂蚁的 C/C++ 标准编程 All Right Reserved. XCMS
粤ICP备06014124号   站长:Antigloss