小编tho*_*san的帖子

元组/领带的返回值优化

我正在考虑在元组/联系的情况下返回值优化,我观察到的行为并不像我预期的那样.在下面的例子中,我希望移动语义能够启动,但它有一个复制操作.以下优化的输出是:

Test duo output, non_reference tuple
Default constructor invoked
Parameter constructor invoked
Copy constructor invoked
Move Assignment operator invoked
100
Run Code Online (Sandbox Code Playgroud)

在函数内部创建元组时复制构造函数的调用似乎是不必要的.有什么办法可以删除吗?我正在使用MSVC 2012编译器.

#include <iostream>
#include <tuple>

class A
{
public:
     int value;
     A() : value(-1)
     {
         std::cout << "Default constructor invoked" << std::endl;
     }

     explicit A(const int v) : value(v)
     {
         std::cout << "Parameter constructor invoked" << std::endl;
     }

     A(const A& rhs)
     {
         value = rhs.value;
         std::cout << "Copy constructor invoked" << std::endl;
     }

     A(const A&& rhs)
     {
         value = …
Run Code Online (Sandbox Code Playgroud)

c++ rvo c++11 stdtuple

17
推荐指数
2
解决办法
3166
查看次数

使用成员变量作为谓词

我试图在一个对象的向量中找到一个对象,其中一个成员变量的值为true.可以在没有定义lamba函数或函数对象的情况下完成,只需指定成员变量本身:

class A
{
public:

   explicit A(bool v, int v2, float v3) : value(v), value2(v2), value3(v3)
   {}
   ...
   bool value;
   int value2;
   float value2;
   ...
}

int main()
{
    std::vector<A> v;
    v.push_back(A(false, 1, 1.0));
    v.push_back(A(true, 2, 2.0));
    v.push_back(A(false, 3, 3.0));

    auto iter = std::find_if(v.begin(), v.end(), &A::value);
}
Run Code Online (Sandbox Code Playgroud)

如上所述编译不起作用,因为它假设A*而不是A.

使用lambdas并不是一个问题,只是好奇.

c++

3
推荐指数
1
解决办法
197
查看次数

标签 统计

c++ ×2

c++11 ×1

rvo ×1

stdtuple ×1