Kan*_*ane 7 c++ language-lawyer perfect-forwarding c++17
鉴于此类层次结构:
#include <iostream>
class Base {
public:
Base() = default;
Base(const Base&) { std::cout << " copy\n"; }
template<typename T>
Base(T&&) { std::cout << " T&&\n"; }
};
class Sub : public Base {
public:
using Base::Base;
};
Run Code Online (Sandbox Code Playgroud)
这是已知的,该代码将打印T&&:
// objects
Base varObj;
const Base constObj;
// invoking constructors
Base copy(varObj); // T&&
Base move(std::move(constObj)); // T&&
Base number(42); // T&&
Run Code Online (Sandbox Code Playgroud)
为什么使用Sub而不是Base“修复”问题?
// objects
Sub varObj;
const Sub constObj;
// invoking constructors
Sub copy(varObj); // copy
Sub move(std::move(constObj)); // copy
Sub number(42); // T&&
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |