由买买提看人间百态

topics

全部话题 - 话题: rvo
1 (共1页)
f********a
发帖数: 1109
1
【 以下文字转载自 JobHunting 讨论区 】
发信人: fololunsia (我心飞扬), 信区: JobHunting
标 题: 问一个关于copy constructor的菜鸟问题。。。。。
发信站: BBS 未名空间站 (Mon Jun 4 12:35:15 2007)
有一个程序:
class RVO{
public:
RVO (const RVO& c_RVO) {printf ("I am in copy constructor\n");}
int mem_var;
};
RVO MyMethod (int i)
{
RVO rvo;
rvo.mem_var = i;
return (rvo);
}
void main()
{
RVO rvo=MyMethod(5);
}
为什么输出是1次:
Copy Constructor
而不是2次:
Copy Constructor
Copy Constructor
j********g
发帖数: 88
2
RVO:
std::string rvo()
{
return std::string("Foo");
}
NRVO:
std::string nrvo()
{
std::string foo("bar");
return foo;
}
b***i
发帖数: 3043
3
我们有个类,叫Pole吧
std::vector PoleAccess::Load(...){
std::vector poles;
... 动态生成Pole对象,加入到vector里面
return poles;
}
然后,有另一个类,HPleManager,里面要这样做
std::vector* PoleManager::LoadHole(
return new std::vector(PoleAccess::Load(...));
}
1 这样的话,是不是一开始有一个vector在栈上,然后为了返回堆上的指针,把内容复
制到了堆上?
2 这个new std::vector(Pole)是move constructor还是copy?
3 但是为了把栈上的变量移动到堆上,还是得copy吧?当然,只是一个vector容器的信
息而已,真正vector内容都在堆上吧。而且,内容指向的Pole对象也都在堆上。
4 这个过程RVO负责直接优化到堆上吗?我问这个问题是因为我需要把PoleAcces... 阅读全帖
h**l
发帖数: 168
4
1 这样的话,是不是一开始有一个vector在栈上,然后为了返回堆上的指针,把内容复
制到了堆上?
yeah, just copy the container info from stack to heap.
2 这个new std::vector(Pole)是move constructor还是copy?
should be move as the method returns r-value.
3 但是为了把栈上的变量移动到堆上,还是得copy吧?当然,只是一个vector容器的信
息而已,真正vector内容都在堆上吧。而且,内容指向的Pole对象也都在堆上。
move constructor of the vector container is used, the container information
is copied from stack to heap, the vector elements (Pole*) are moved
4 这个过程RVO负责直接优化到堆上吗?我问这个问题是因为我需要把PoleAccess::
Load返回的每一个Pole对象... 阅读全帖
w*******y
发帖数: 60932
i**r
发帖数: 40
6
来自主题: JobHunting版 - one C++ question
It might have to do with a compiler optimization technique call Return
Value Optimization(RVO).
Both f1 and f2 are pass-by-value and return-by-value, therefore
calling function f1 or f2 will make at least 2 copies of object.
The f1 function call:
C second = f1(first);
is within an assignment statement, in theory this statement should
call copy ctor 3 times.
However, since the return value of f1 is an rvalue, i.e. temporary,
and will be destroyed after the assignment operation, AND the return
val
l*******g
发帖数: 4894
7
来自主题: JobHunting版 - one C++ question
I am not sure about he RVO you mentioned.
for this question, ctor is called just every time "C first" executed where
the C() is called. Due to everytime it is a call by value and return by
value. so it has to make a copy for that. so the C(const C&) is called.
so the "A copy was made" are executed three time because two call by value
and one return by value.
l*******g
发帖数: 4894
8
来自主题: JobHunting版 - one C++ question
恩,其实我对于c++也不是很熟悉,所以说的不一定对。我的理解是:
对于第二个函数,因为返回的c是一个传递进来的copy值,所以在return的时候需要再
做一次copy,也就是lamR说的不是一个temp的值。
似乎我刚才第一遍说的也不对。不过确实帮助理解了RVO了。多谢!

both
c
q****x
发帖数: 7404
9
来自主题: JobHunting版 - 问个C++模板定义的问题
听说prime比较浅?
那个rvo的问题在tcpl上没查到。prime上有吗?
y*******g
发帖数: 6599
10
来自主题: JobHunting版 - 问个C++模板定义的问题
rvo这种特别问题google一下就好了。
主要看编译器实现了,当然新标准是另一回事
S**I
发帖数: 15689
11
来自主题: JobHunting版 - 问个C++模板定义的问题
rvo在标准里讲了
j********x
发帖数: 2330
12
RVO
J***o
发帖数: 553
13
来自主题: JobHunting版 - 问一个低级的问题
semantically speaking, the returned object is a copy of a so it doesnt
matter a got destructed or not. the actual implementation may vary depends
on compiler. most compilers utilize RVO/NRVO so the unnecessary copy is
eliminated.
b**m
发帖数: 1466
14
国内有把一份Avastin分成很多份这样非常便宜,效果也好,但这样不合法。
不知道美国这边的医生这边会不会这么治疗。
病人从国内过来没有保险。
f****o
发帖数: 2770
15
完全不知道你在说啥
什么叫做“把一份Avastin分成很多份”?
l*h
发帖数: 4124
16
it's a serious breach of sterility and patient safety protocols unless you
are working in a sterile station.
b**m
发帖数: 1466
17
Avastin 100mg/4ml的剂量可以稀释后眼内注射1.25mg 或者2.5mg
相当于每次治疗只需要1/40或者1/80的剂量,所以和lucentis或者别的药相比便宜非常多
b**m
发帖数: 1466
18
原来北京和上海一些医院给病人打,一次几十个人一起打,后来医生受到医院的压力太
大,不敢给打了。
b**m
发帖数: 1466
19
看来希望不大,Eye Problems From Repackaged Bevacizumab
http://www.medscape.com/viewarticle/748859
t****t
发帖数: 6806
20
来自主题: Programming版 - 一道c++的考古题
return A(c)就不是named RVO了
name的意思就是一个有名字的(局部变量)
e****d
发帖数: 895
21
来自主题: Programming版 - which style do you prefer?
RVO will apply when the returned value is used
to construct another vector.
Or wait until the move semantics has been implemented in stl.
N***m
发帖数: 4460
22
来自主题: Programming版 - copy constructor 问题
Effective c++ 上还专门讲过 RVO
q****x
发帖数: 7404
23
special case of rvo?
d****n
发帖数: 1241
24
返回值优化(RVO)通常指带的是在C++编译器里的一种优化吧?在C编译器里好像没有类
似的优化.
b*******s
发帖数: 5216
25
典型的rvo场景
b***i
发帖数: 3043
26
看来是copy,因为move需要std::move
那么,如果这个类的成员变量是vector poles的话,poleManager本身是另一个
类生成的singleton实例的指针,那么它的内容应该在堆上,这样的话整个过程从
PoleAcess::Load那里是在栈上生成一个vector,最后需要move到堆上吗?当然如果移
动,也不是很大数据量,因为只是这个vector自己的数据,而不是整个内容。
RVO能否知道本来为了要放到堆上而优化?
b***i
发帖数: 3043
27
好像从函数内的栈上临时变量返回然后生成堆上的也是可以RVO的,所以声明vector的
指针完全没有必要。
但是vector内部存指针好像有必要。毕竟这个vector上存的类可能有继承关系,虚函数
什么的。

-c
heap
h**l
发帖数: 168
28
你是对的,这样做不对。
其实不用reference, RVO就可以用上了,用reference啥好处都没有啊。
如果这种错误还有人反对修改的话你应该考虑换个公司了,公司环境和同事水平对你影
响很大的。。。
w*******y
发帖数: 60932
29
THE LINK:
http://shop.retrevo.com/m/dailydeal?prodid=rd-s10;RVO-20101129-3
The HANNSbook (SN10E2) ultraportable netbook provides the freedom and power
to compute on the move. With comprehensive connectivity via WLAN and LAN,
staying in touch is made simple with a builtin 1.3MP webcam and microphone
enable instant video conferencing. The HANNSbook series features elegant
glossy black design, boasting a slim and lightweight form factor for
portability and the battery power to keep computing for lo... 阅读全帖
w*******y
发帖数: 60932
w*******y
发帖数: 60932
31
Android Mini Collectible Figure 3" Officially Licensed - $7.99:
http://shop.retrevo.com/m/dailydeal?prodid=rd-s21.RVO-20110909-
Why Should I Buy this Android Mini Collectible Vinyl Green Robot?
Part of the Android Mini Collectibles line, this is in the Standard Green
Mini Series
Be aware that there are dozens of counterfeit figures on the web that
closely resemble the actual real one
Start collecting; we will have more in the series as soon as they are
available!
Artist Andrew Bell teamed up wi... 阅读全帖
1 (共1页)