Kal*_*iwy 11 c++ performance dereference
有
struct Person {
string name;
};
Person* p = ...
Run Code Online (Sandbox Code Playgroud)
假设没有运算符过载.
哪个更有效(如果有的话)?
(*p).name 与 p->name
在我脑后的某个地方,我听到一些铃声响起,*取消引用操作员可能会创建一个对象的临时副本; 这是真的?
这个问题的背景是这样的情况:
Person& Person::someFunction(){
...
return *this;
}
Run Code Online (Sandbox Code Playgroud)
我开始怀疑,如果将结果更改为Person*最后一行,只是return this会产生任何差异(性能)?
没有区别.即使标准说两者是等价的,如果有任何编译器不会为两个版本生成相同的二进制文件,那么它就是一个糟糕的版本.
当您返回引用时,这与传回指针完全相同,排除了指针语义.
你传回一个sizeof(void*)元素,而不是一个sizeof(yourClass).
所以当你这样做时:
Person& Person::someFunction(){
...
return *this;
}
Run Code Online (Sandbox Code Playgroud)
您返回一个引用,该引用具有与指针相同的内在大小,因此没有运行时差异.
您的使用也是如此(*i).name,但在这种情况下,您创建一个l值,它具有与引用相同的语义(另请参见此处)
| 归档时间: |
|
| 查看次数: |
375 次 |
| 最近记录: |