相关疑难解决方法(0)

复制elision用于传值参数

特定

struct Range{
    Range(double from, double to) : from(from), to(to) {}
    double from;
    double to;
};

struct Box{
    Box(Range x, Range y) : x(x), y(y) {}
    Range x;
    Range y;
};
Run Code Online (Sandbox Code Playgroud)

假设我们跑了Box box(Range(0.0,1.0),Range(0.0,2.0)).

启用优化的现代编译器是否可以避免Range在此构造期间完全复制对象?(即构建Range内部的对象box以开始?)

c++ pass-by-value copy-elision

17
推荐指数
3
解决办法
3167
查看次数

为什么在用于初始化另一个对象时应该按值传递参数?

将对象传递给函数时,可以选择按值或按 传递参数const&。特别是当对象的创建可能很昂贵并且它在内部发生变异或用于初始化另一个对象时,建议按值传递对象。例如:

class Foo {
    std::vector<std::string> d_strings;
public:
    Foo(std::vector<std::string> strings): d_strings(std::move(strings)) {}
    // ...
};
Run Code Online (Sandbox Code Playgroud)

传统的方法是将strings参数声明为std::vector<std::string> const&并复制参数。上面构造函数的 value 参数也需要复制!

为什么通过值传递而不是传递更可取const&

c++ c++11

5
推荐指数
1
解决办法
423
查看次数

标签 统计

c++ ×2

c++11 ×1

copy-elision ×1

pass-by-value ×1