30得票2回答
在类中正确使用` = delete` 方法

以下代码片段是否正确用于取消定义类的所有其他生成的方法和构造函数?struct Picture { // 'explicit': no accidental cast from string to Picture explicit Picture(const string &...

30得票1回答
最佳构造函数形式是什么?按值传递还是引用传递?

我正在思考构造函数的最佳形式。这里是一些示例代码: class Y { ... } class X { public: X(const Y& y) : m_y(y) {} // (a) X(Y y) : m_y(y) {} // (b) X(Y&& y)...

30得票4回答
移动构造函数和静态数组

我一直在探索C++中移动构造函数的可能性,想知道在下面这个示例中利用此功能的一些方法。请考虑以下代码:template<unsigned int N> class Foo { public: Foo() { for (int i = 0; i < N;...

30得票3回答
转发引用和右值引用共享相同的语法背后的原理是什么?

这是一个右值引用: void foo(int&& a); 它不与lvalues绑定。 int i = 42; foo(i); // error 这是一个通用的参考资料: template<typename T> void bar(T&&am...

28得票1回答
当可移动对象的最后一次使用发生时,编译器是否会自动使用移动语义?

最近我一直在学习rvalue引用,并得出结论,无论何时会完全复制一个对象,使用传值方式都是非常有优势的(要完整的理由请看例如如何在添加rvalue引用运算符重载时减少冗余代码?和想加速?就传值!),因为编译器可以在类似f(std::move(a));的情况下自动优化掉拷贝操作,其中f定义为vo...

28得票3回答
为什么要使用std::forward<T>而不是static_cast<T&&>?

当给定下面结构的代码时 template &lt;typename... Args&gt; void foo(Args&amp;&amp;... args) { ... } 我经常看到库代码在参数转发的函数中使用static_cast&lt;Args&amp;&amp;&gt;。通常,这样做的...

27得票1回答
在基于范围的for循环中,“&”和“&&”有什么区别?

我想知道在像这段代码中的基于范围的for循环中,for (auto&amp; i : v)和for (auto&amp;&amp; i : v)有什么区别: #include &lt;iostream&gt; #include &lt;vector&gt; int main() { ...

26得票3回答
std::forward和prvalue有哪些使用案例?

最常见的使用 std::forward 的方法是完美转发一个转发(通用)引用,例如: template&lt;typename T&gt; void f(T&amp;&amp; param) { g(std::forward&lt;T&gt;(param)); // perfect ...

26得票3回答
C++11右值引用调用复制构造函数的问题

我一直在测试一些C++11的新特性。我遇到了右值引用和移动构造函数。 我实现了我的第一个移动构造函数,这是它:#include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class TestClass{ p...

26得票1回答
为什么`basic_ostream`的`operator<<`中的rvalue重载返回一个左值引用?

§27.7.3.9 定义了以下重载形式的 operator&lt;&lt;:template &lt;class charT, class traits, class T&gt; basic_ostream&lt;charT, traits&gt;&amp; operator&lt;&...