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