题
是否将指针并将其传递给通过引用创建对象的副本来获取其参数的函数?
解决方案
在这种情况下,指针上的值被复制了(尽管优化者可以将其优化为止,但不一定是这种情况)。
int val = *pPtr;
但是,在这种情况下,不会进行任何副本:
int& rVal = *pPtr;
没有发生副本的原因是因为参考不是机器代码级别的构造。它是一个较高的级别构造,因此编译器内部使用而不是为其生成特定代码。
显然,同样的是函数参数。
其他提示
在简单的情况下,没有。但是,还有更多复杂的情况:
void foo(float const& arg);
int * p = new int(7);
foo(*p);
在这里,创建了一个临时对象,因为是指指针的类型(int
)不匹配函数参数的基本类型(float
)。存在转换序列,转换后的临时性可以结合到 arg
因为那是const引用。
希望它不会:如果调用函数逐值将其参数划分。
此外,这就是参考的预期行为:
void inc(int &i) { ++i; }
int main()
{
int i = 0;
int *j = &i;
inc(*j);
std::cout << i << std::endl;
}
此代码有望打印 1
因为 inc
通过参考来参数。已经制作了副本 inc
致电,代码将打印 0
.
否。引用或多或少像具有不同符号的指针,并且没有零引用的限制。但是像指针一样,它仅包含对象的地址。
不隶属于 StackOverflow