gpt4 book ai didi

c++ - 错误 - c 占用临时地址

转载 作者:行者123 更新时间:2023-11-28 03:23:13 24 4
gpt4 key购买 nike

我在下面的代码中遇到错误

void setStyle(const ctlStyleBase* style)
{
//do something
}

void create(const ctlStyleBase* style = 0)
{
if(style == 0) setStyle(&ctlStyleGradient()); // error : taking address of temporary
else setStyle(style);
}

我不认为这是错误的,因为我只在 setStyle 中使用它,它不会在 setStyle 返回之前被销毁。谁能告诉我代码是否有问题?

[编译器 g++ 4.7.2]

最佳答案

嗯,很难——这是语言的规则,你不能获取临时对象的地址。这条规则的原因是基本上没有一个好的理由这样做。

在您的示例中,ctlStyleGradient() 返回一些类型为 ctlStyleBase 的对象。如果您想在 setStyle 函数中修改该对象(尽管在这种情况下您没有这样做),那么一旦您完成,该对象就会不复存在,从而使整个修改毫无意义.

是的,您可以在操作具有可观察到的副作用的地方设计代码,但它本身是非常糟糕的风格。因此,没有深层次的技术原因说明您为什么不能获取临时地址,但语言决定不允许您这样做,因为它被认为是不合适的。

但这似乎不是您想要做的。也许您的意思是让 ctlStyleGradient() 返回一个指针本身?或者,如果您只需要观察一个状态而从不更改它,则按值或常量引用传递状态。

关于c++ - 错误 - c 占用临时地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14850831/

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