cppreference定义“简单移动构造函数”:
如果满足以下所有条件,则类 T 的移动构造函数是微不足道的:
它不是用户提供的(意味着它是隐式定义或默认的);
T 没有虚成员函数;T 没有虚基类;
为 T 的每个直接基选择的移动构造函数是微不足道的;
为 T 的每个非静态类类型(或类类型数组)成员选择的移动构造函数是微不足道的。
cppreference还定义了“隐式定义的移动构造函数”:
如果隐式声明的移动构造函数既不是删除的也不是平凡的,则它由编译器定义(即生成并编译函数体)(如果 odr 使用或需要进行常量求值)。
显然,不能删除隐式声明的移动构造函数。但“这一定不是微不足道的”让我听起来很困惑。
这是否意味着如果它不是微不足道的,那么它应该是“用户提供的”?如果它已经是“用户提供的”,那么为什么必须“隐式声明的”呢?
那么这里出了什么问题呢?隐式声明的移动构造函数必须不重要的意义是什么?请帮忙。
我无法理解真实的本质std::move
std::move(object)返回“对该对象的右值引用”。是的,我明白了。push_back(std::move(object))而不是push_back(object)避免复制。我没有明白这一点,因为它似乎与下面的示例相矛盾:#include <utility>
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
template <class T> void print(T const & object){
for (auto var : object){std::cout << ' '<<var;}
std::cout << '\n';
}
int main () {
std::string foo = "foo-string";
std::string bar = "bar-string";
std::vector<std::string> myvector = { "super", "vip" , "pro" , "ok" }; // capcity=size=4;
// this block is just to increase the capacity of the vector
myvector.push_back( …Run Code Online (Sandbox Code Playgroud) 我有一个严重的问题,以我浅薄的知识来协调“内联概念”与“链接”:
extern从其他文件访问“非静态实体”(例如未使用静态密钥声明的实体)inline使函数或变量出现在“头文件”中,以便可以跨多个翻译单元访问它(A:具有内部链接的内联函数? - 这是我第一次听说具有“内部链接”的内联实体)
可以从多个翻译单元的任何位置访问内联实体,因此这是否意味着“内联实体”应该始终具有“外部链接”?
可以跨多个翻译单元从任何地方访问并具有“内部链接”的“内联实体”有什么意义?
任何答案或任何证实我在任何一点上都是错误的确认将不胜感激。