小编Mik*_*lya的帖子

如何实现std :: function?

根据我发现的源代码,lambda表达式基本上是由编译器创建一个带有重载函数调用运算符的类和引用变量作为成员的类实现的.这表明lambda表达式的大小是变化的,并且给定足够的引用变量,其大小可以是任意大的.

一个std::function应该有一个固定的大小,但一定要能包住任何可调用的,包括相同种类的任何lambda表达式.它是如何实现的?如果std::function内部使用指向其目标的指针,那么在std::function复制或移动实例时会发生什么?是否涉及堆分配?

c++ lambda c++11

92
推荐指数
3
解决办法
2万
查看次数

C++ API中的智能指针?

除了一些罕见的情况之外,通常建议不要在现代C++中使用原始指针.在C++库API中使用智能指针的常见做法是什么?

以下用例出现在我的脑海中:

  1. 返回新对象的函数.
  2. 一个返回新对象的函数,但它还创建了对该对象的另一个引用.
  3. 仅使用它接收的对象作为参数的函数.
  4. 接管对象所有权的函数.
  5. 一个函数,它将存储对作为参数接收的对象的引用,但可能存在对同一对象的其他引用(来自调用方).

c++ api smart-pointers c++11

5
推荐指数
2
解决办法
1100
查看次数

引入rvalue引用实际上有用吗?

将rvalue引用引入C++的典型原因是在评估复杂的C++表达式时消除(优化)多余的复制.

但是,C++ 98/C++ 03 有两种编译器优化技术,它们基本上用于相同的目的,即

有没有任何真实的用例,当上述技术(使用适当编写的代码)无法消除多余的复制,但右值引用可以成功吗?

c++ language-design rvalue-reference c++11

0
推荐指数
2
解决办法
439
查看次数