gpt4 book ai didi

c++ - 获取临时对象的地址

转载 作者:IT老高 更新时间:2023-10-28 13:00:16 26 4
gpt4 key购买 nike

§5.3.1 一元运算符,第 3 节

The result of the unary & operator is a pointer to its operand. The operand shall be an lvalue or a qualified-id.

在这种情况下,“应该”到底是什么意思?这是否意味着获取临时地址是错误的?我只是想知道,因为 g++ 只给了我一个警告,而 comeau 拒绝编译以下程序:

#include <string>

int main()
{
&std::string("test");
}

g++ 警告:临时取地址

comeau 错误:表达式必须是左值或函数指示符

请问有人有微软编译器或其他编译器并且可以测试这个程序吗?

最佳答案

标准语言中的“shall”一词意味着严格的要求。所以,是的,您的代码格式错误(这是一个错误),因为它试图将地址运算符应用于非左值。

然而,这里的问题不是试图获取一个临时地址。再次,问题在于获取非左值的地址。临时对象可以是左值或非左值,具体取决于产生该临时对象或提供对该临时对象的访问的表达式。在您的情况下,您有 std::string("test") -一种转换为非引用类型的功能样式,根据定义,它会产生非左值。因此出现错误。

如果你想获取一个临时对象的地址,你可以通过这样做来解决这个限制,例如

const std::string &r = std::string("test");
&r; // this expression produces address of a temporary

只要临时存在,结果指针就保持有效。还有其他方法可以合法地获取临时对象的地址。只是你的具体方法恰好是非法的。

关于c++ - 获取临时对象的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2280688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com