当通过引用函数传递时取消引用指针会发生什么?
这是一个简单的例子
int& returnSame( int &example ) { return example; }
int main()
{
int inum = 3;
int *pinum = & inum;
std::cout << "inum: " << returnSame(*pinum) << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是否有临时对象产生?
我得到了一些代码,其中一些参数是指针,然后指针被解引用以提供值.我担心指针取消引用会花费周期,但在查看之前的StackOverflow文章之后:取消引用指针有多贵?,也许没关系.
这里有些例子:
bool MyFunc1(int * val1, int * val2)
{
*val1 = 5;
*val2 = 10;
return true;
}
bool MyFunc2(int &val1, int &val2)
{
val1 = 5;
val2 = 10;
return true;
}
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢传递参考作为一种风格问题,但是一个版本(在处理周期方面)比另一个版本更好吗?
可能重复:
在C++中取消引用指针有多贵?
如果我有一个指向对象的指针,那么Object *ptr;我想把它传递给void foo(Object& obj)我理解我需要编写的形式的方法:
foo(*ptr);
Run Code Online (Sandbox Code Playgroud)
但为什么要解除引用ptr?通过它不是没有意义foo(ptr);吗?我担心*ptr可能会制作原始对象的副本,或者至少不仅仅是传递到foo地址来使用.
任何人都可以为我清除这个吗?是否传递*ptr了一个潜在的瓶颈,因为代码期望这个代码表现得像函数一样快void foo(Object *obj);并且通过调用foo(ptr)?