【发布时间】:2016-02-25 16:15:48
【问题描述】:
给定
struct Range{
Range(double from, double to) : from(from), to(to) {}
double from;
double to;
// if it matters to the compiler, we can add more fields here to make copying expensive
};
struct Box{
Box(Range x, Range y) : x(x), y(y) {}
Range x;
Range y;
};
someone said 在Box box(Range(0.0,1.0),Range(0.0,2.0)) 中,编译器可以通过在box 中构造它们来完全避免复制Range 对象。
有没有编译器真正做到这一点?
我自己的尝试没有成功。
【问题讨论】:
-
如果您的编译器是后裔,请放心。它会避开他们。
-
@101010 任何特定的现代编译器都不错吗?我做不到。
-
您应该在没有重复问题的情况下对该答案发表评论。
-
@tennenrishin 编译器不会省略从参数到数据成员的副本,但您可以
std::move提高效率。 -
@tennenrishin 既然你问到关于删除 all 的副本,我会说答案是错误的。但我认为无论如何只能省略一组副本。所以有人可能会争辩说这种期望是错误的。
标签: c++ pass-by-value copy-elision