我有一个功能
void h(A const a){...};
Run Code Online (Sandbox Code Playgroud)
如果我这样做,行为是否有可能改变:
void h(A const &a){..same body as above..};
Run Code Online (Sandbox Code Playgroud)
您可以根据需要自由定义类型A. 当然.
在第一次重载时,h不能改变'a'.它的所有目的都是'h'体中的const.但是,这涉及复制初始化'a'的复制构造函数.
因此,在第一种情况下,它需要'A'中的可访问复制构造函数.出于同样的原因,它需要在A中使用可访问的析构函数.
在第二种情况下,不需要复制初始化,因此不需要'A'的可访问复制构造函数/析构函数.
此外,在第一种情况下,如果将'A'的派生对象作为参数传递,则'a'将经历'切片'.第二个函数不会出现"切片"问题,因为基类引用可以绑定到派生对象.因此,在这种情况下也不需要可访问的析构函数.
在C++ 11中,第一个函数要求'A'具有可访问的'copy'或'move'构造函数,具体取决于调用'h'的方式.
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |