c++ - 将临时指针传递给对象的临时指针

标签 c++ pointers visual-studio-2012 parameter-passing

#include <iostream>
#include <tchar.h>

void output(int *param)
{
    std::cout << "Value: " << *param << std::endl;
};

int _tmain(int argc, _TCHAR* argv[])
{
    int i = 34;

    output(&i);

    return 0;
}

显然将“值:34”写入控制台。

但如果我进行以下更改

...
void output(int **param)
{
    std::cout << "Value: " << **param << std::endl;
}
...
    output(&(&i));
...

我收到编译错误“'&' 需要左值”。

顺便说一句,我什至尝试进行以下更改:

output(&34);

确实这感觉不对......不知何故。

我的问题是:为什么不允许在 r 值下使用 &?汇编程序级别有什么原因吗?

最佳答案

您正在尝试获取对右值的引用,但它基本上没有定义,因为它始终是一个临时值,实际上在堆栈/堆上从来没有地址。这就是 C++11 引入右值引用的原因,但这与您的问题完全不同。

要让您的代码编译您需要执行以下操作:

int   i = 34;
int* pi = &i;

output(&ip);

通过在 pi 中“接地”您的引用,您为编译器提供了一个堆栈上的真实地址,该地址可以提供给 output

关于c++ - 将临时指针传递给对象的临时指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21231918/

相关文章:

.net - 如何在 VS2012 分析器中对每行代码进行计时?

c# - 将日期时间转换为没有默认时间值的字符串

C++ 互斥锁不跨 Windows 帐户锁定

c++ - 字符串模式匹配和插入C++

c++ - 类私有(private)成员 C++ 的动态内存分配与 std::vector

c++ - 如何使指针显示对象的字符串变量?

c++ - 通过指针或引用 C++ 返回第二个值

visual-studio-2012 - Web Essentials - 捆绑版本控制

c++ - 在 std::array 中的元素上调用用户定义的构造函数

char *string[]声明错误