gpt4 book ai didi

c++ - 使用临时地址安全吗?

转载 作者:可可西里 更新时间:2023-11-01 15:46:20 24 4
gpt4 key购买 nike

在我的程序中,我想获取一个临时地址。这是一个例子:

#include <iostream>

struct Number {
int value;
Number(int n) {
value = n;
}
};

void print(Number *number) {
std::cout << number->value << std::endl;
}

int main() {
Number example(123);
print(&example);
print(&Number(456)); // Is this safe and reliable?
}

这将输出:

123
456

要编译,需要-fpermissive 标志。

这是我的问题:这是否安全并且可靠?在什么情况下可能会出错?

最佳答案

如果您对“安全可靠”的定义包括“如果编译器更新,将编译并产生相同的结果”,那么您的示例无效。

您的示例在所有 C++ 标准中都是错误格式的。

这意味着,即使现在可以强制编译器接受它,也不能保证您的编译器的 future 更新会接受它,或者如果编译器确实接受代码,将产生相同的预期效果。

大多数编译器供应商都支持编译器中的非标准功能,并在编译器的更高版本中删除或更改对这些功能的支持。

考虑更改您的函数,使其接受 const Number & 而不是指针。 const 引用可以隐式绑定(bind)到临时变量,而无需强制编译器提交(例如使用命令行选项)。非 const 引用不能。

关于c++ - 使用临时地址安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49702666/

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