根据我发现的源代码,lambda表达式基本上是由编译器创建一个带有重载函数调用运算符的类和引用变量作为成员的类实现的.这表明lambda表达式的大小是变化的,并且给定足够的引用变量,其大小可以是任意大的.
一个std::function应该有一个固定的大小,但一定要能包住任何可调用的,包括相同种类的任何lambda表达式.它是如何实现的?如果std::function内部使用指向其目标的指针,那么在std::function复制或移动实例时会发生什么?是否涉及堆分配?
除了一些罕见的情况之外,通常建议不要在现代C++中使用原始指针.在C++库API中使用智能指针的常见做法是什么?
以下用例出现在我的脑海中:
将rvalue引用引入C++的典型原因是在评估复杂的C++表达式时消除(优化)多余的复制.
但是,C++ 98/C++ 03 有两种编译器优化技术,它们基本上用于相同的目的,即
有没有任何真实的用例,当上述技术(使用适当编写的代码)无法消除多余的复制,但右值引用可以成功吗?