社区
C++ 语言
帖子详情
学习C++primer 第16天 之 小问题
jinjunweiruan
2008-07-18 06:59:07
1.书上有这么一句话:“普通的非引用类型的实参数通过复制对应的实参实现初始化”
我想问下, 为什么要复制后拿
那个副本来初始
化?为何不直接用实参去初始化?是为了安全?是的话,那我先得到副本后,
不用副本去初始化,而用原来的实参去初始化
。这样与“用副本去初始化”有什么区别。
不是为了安全,那是为了什么。。
2.
void f(T&);
书上解答说:“第个是引用.”
怎么引用的这个
符号&
在后面呢?...
应该在前面啊。还是其实2种都可以。
XX啊。。
...全文
190
24
打赏
收藏
学习C++primer 第16天 之 小问题
1.书上有这么一句话:“普通的非引用类型的实参数通过复制对应的实参实现初始化” 我想问下, 为什么要复制后拿那个副本来初始化?为何不直接用实参去初始化?是为了安全?是的话,那我先得到副本后,不用副本去初始化,而用原来的实参去初始化。这样与“用副本去初始化”有什么区别。 不是为了安全,那是为了什么。。 2. void f(T&); 书上解答说:“第个是引用.” 怎么引用的这个符号&在后面呢?... 应该在前面啊。还是其实2种都可以。 XX啊。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jinjunweiruan
2008-07-18
打赏
举报
回复
形参是个副本。。。。???
jinjunweiruan
2008-07-18
打赏
举报
回复
14.15.16.的是正解吗?...
bendise
2008-07-18
打赏
举报
回复
我想问下, 为什么要复制后拿那个副本来初始化?为何不直接用实参去初始化?是为了安全?是的话,那我先得到副本后,不用副本去初始化,而用原来的实参去初始化。这样与“用副本去初始化”有什么区别。
他说的是非引用的形参,如果是非引用的形参就是一个副本,如果是引用的形参就不是一个副本,至于你说的“为何不直接用实参去初始化”
如果是非引用的形参,就是用的实参去初始化的,你这里不理解是因为你对形参和实参的感念比较模糊,建议查下资料
void f(T&);
书上解答说:“第个是引用.”
怎么引用的这个符号&在后面呢?...
应该在前面啊。还是其实2种都可以。
这个是头文件里的声明,不是实做,他传入了一个T类型的形参引用
xjywc
2008-07-18
打赏
举报
回复
[Quote=引用 1 楼 OufengMorpheus 的回复:]
为什么要复制后拿那个副本来初始化?
被调函数会在栈上开辟一块自己的空间.调用时这个副本就在这块空间中.
这是编译器的做法.这样的函数运行不会影响主调函数的地址空间值.
void f(T&);
函数原型声明.参数名是可选的.
void f(T& a);
如果作者这样写你就觉得爽了.
T是一个自定义类型.
[/Quote]
正解,被调函数确实在函数堆栈上用副本初始化,除了引用和指针传值外是直接操作对象外,其余实参都是在函数堆栈上进行操作,函数退出后对主调函数没影响。
函数声明是T& 就是声明啊,就像你用的void f(int*)只是进行声明,不需要参数,而且&在c++中是引用的含义,并不是c中取地址的含义,对引用对象直接进行操作。
sunhuanwen
2008-07-18
打赏
举报
回复
1, 拿副本初始化 是因为参数如果不是引用或者指针,那么就不知道地址,只能传递由原值拷贝过来的值。因此要用副本初始化。
2, void f(T&);
这句话仅仅是个函数声明,T可以理解为int,float之类的类型,因为仅仅是声明,所以可以省略参数名。
wjb_yd
2008-07-18
打赏
举报
回复
[Quote=引用楼主 jinjunweiruan 的帖子:]
1.书上有这么一句话:“普通的非引用类型的实参数通过复制对应的实参实现初始化”
我想问下, 为什么要复制后拿那个副本来初始化?为何不直接用实参去初始化?是为了安全?是的话,那我先得到副本后,不用副本去初始化,而用原来的实参去初始化。这样与“用副本去初始化”有什么区别。
不是为了安全,那是为了什么。。
[/Quote]
不是拿副本初始化,而是拿实参初始化副本,副本的名字叫形参。
Lstyk
2008-07-18
打赏
举报
回复
"我想问下, 为什么要复制后拿那个副本来初始化?为何不直接用实参去初始化?是为了安全?是的话,那我先得到副本后,不用副本去初始化,而用原来的实参去初始化。这样与“用副本去初始化”有什么区别。"
不是拿副本去初始化吧~~
而是那个形参是实参的一个副本,形参是由实参初始化的,它是实参的副本。
hahaysw
2008-07-18
打赏
举报
回复
[Quote=引用 7 楼 jinjunweiruan 的回复:]
按址传递 pass by address 函数里的参数叫实参
f(int* a)
按引用传递 pass by reference 函数里的参数叫实参
f(int& a)
....
这样。。。。的。。说。。。
没像到是这样,我一直以为实参就是定义的时候的那个,比如int i=a,让后用函数传递。。。我一直以为是a是个实参。。。。。
[/Quote]
f(int& a)
f(int* a)
上面的a都是行参.int *a;f(a)这的a才是实参.
行参是函数定义时的参数,实参是调用函数传入的参数.
我也是新手,不知道上面的对不对~
matrixdwy
2008-07-18
打赏
举报
回复
我怀疑LS是开窑子的。。。。。。
zghua851004
2008-07-18
打赏
举报
回复
[Quote=引用 5 楼 matrixdwy 的回复:]
LZ好早,各位好早
[/Quote]
pengzhixi
2008-07-18
打赏
举报
回复
拿副本来初始化是为了保护实参。
void f(T&); 是省略了参数名,前面的T是类型名。
jinjunweiruan
2008-07-18
打赏
举报
回复
去找点资料看看
汗
函数确实博大精深..
jinjunweiruan
2008-07-18
打赏
举报
回复
按址传递 pass by address 函数里的参数叫
实参
f(int* a)
按引用传递 pass by reference 函数里的参数叫
实参
f(int& a)
....
这样。。。。的。。说。。。
没像到是这样,我一直以为实参就是定义的时候的那个,比如int i=a,让后用函数传递。。。我一直以为是a是个实参。。。。。
matrixdwy
2008-07-18
打赏
举报
回复
LZ应该先搞清楚函数传参的三种方式
按值传递 pass by value 函数里的参数叫形参
f(int a)
按址传递 pass by address 函数里的参数叫实参
f(int* a)
按引用传递 pass by reference 函数里的参数叫实参
f(int& a)
matrixdwy
2008-07-18
打赏
举报
回复
LZ好早,各位好早
SeanHwang
2008-07-18
打赏
举报
回复
1这个问题,LZ去看看随便哪本C书上就有的指针参数和一般参数的swap()就可以了~
2只是个函数原型,只是声明一下,所以T只是自己定义的一个类而已.
elegant87
2008-07-18
打赏
举报
回复
1.普通的非引用类型的形参就死通过值传递来实现的,
在传递的过程中不会改变实参的值,这是很安全的!
2.这是原型说明,只给出类类型,没给出参数。
你可以理解为void f(T& t)
K行天下
2008-07-18
打赏
举报
回复
1\
非引用 形参 就是传值的概念,复制一份,不会在函数类改变参数值
2 这是原型说明,只给出类类型,没给出参数, 就如 int max(int,int);
实际是void f(T& t);
肯定是在后面啊!
OphoneOu
2008-07-18
打赏
举报
回复
为什么要复制后拿那个副本来初始化?
被调函数会在栈上开辟一块自己的空间.调用时这个副本就在这块空间中.
这是编译器的做法.这样的函数运行不会影响主调函数的地址空间值.
void f(T&);
函数原型声明.参数名是可选的.
void f(T& a);
如果作者这样写你就觉得爽了.
T是一个自定义类型.
sunhuanwen
2008-07-18
打赏
举报
回复
pass by heart!!!
加载更多回复(3)
C++
Primer
课后习题解答(第1~
16
章完整答案) 清晰 完整版
C++
Primer
课后习题解答(第1~
16
章完整答案)清晰完整版
C++
primer
第十六章 泛型 实现自定义Queue 修改版
C++
primer
第十六章 泛型 实现自定义Queue 解决模板编译错误、包含模式
C++
11语法使用
C++
语言基础视频教程
C++
语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践...
学习
者能够通过实践的方式,学会利用
C++
语言解决
问题
,具备进一步
学习
利用
C++
开发应用程序的基础。
C++
Primer
第四版【中文高清扫描版】.pdf
第
16
章 模板与泛型编程 525
16
.1 模板定义 526
16
.1.1 定义函数模板 526
16
.1.2 定义类模板 528
16
.1.3 模板形参 529
16
.1.4 模板类型形参 531
16
.1.5 非类型模板形参 533
16
.1.6 编写泛型程序 534
16
.2 实例化 535...
C++
Primer
习题集(第五版)
C++
Primer
习题集(第五版) , 带目录完整版。 --------------------------------------------------------------------------- 目录 第1章............................................................ 1 练习1.1 ...
C++ 语言
64,683
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章