我最近在接受采访时询问了复制构造函数的参数 将帖子 作为实现复制构造函数功能的C ++语言的设计者,为什么要在const指针的const指针上选择常量引用参数。
我有一些想法,因为指针可以分配给NULL,这可能在复制构造函数中没有意义(语义上),而且指针变量是一个独立的对象(这可能不是很好用)效率)而引用只是实际对象的别名(因此是传递对象的更好方法) 还有其他想法吗?
答案 0 :(得分:6)
因为Stroustrup希望类类似于原始类型。初始化int
变量时:
int x = 5;
int y = x; // Why would you write int y = &x; ?
将常量指针传递给常量对象,与C ++带来的内容不一致.C ++中的类只是用户定义类型,如果它们不像原始类型那样工作那么它们是什么?
另一个例子是C ++中的编程在没有引用的情况下会很糟糕是运算符重载。想象一下你必须写:
myclass myobj1, myobj2, myobj3;
&myobj3 = &myobj1 + &myobj2;
答案 1 :(得分:1)
这是一种语法上的便利。
调用复制构造函数时最常见的用例是参数是按值传递的,还是由值返回的。
如果复制构造函数的参数是指针而不是引用,则需要应用address-of运算符才能调用复制构造函数,这样会很尴尬。
答案 2 :(得分:0)
我认为不在复制构造函数中使用指针的重要原因是如何将临时值绑定到rvalues。对于指针,可以将指针保存到临时,稍后使用未定义的行为,使用引用更难以存储和使用引用,更容易使用实际值。