gpt4 book ai didi

c++ - 将临时地址传递给带有指针参数的函数是否合法

转载 作者:行者123 更新时间:2023-11-28 04:56:50 25 4
gpt4 key购买 nike

将临时对象的地址传递给采用指针的函数是否合法。如果不是,标准中的哪个地方说这是 UB。具体来说,我想确认以下代码是合法的并且不包含未定义的行为:

#include <memory>
template <class T>
inline const T* unsafe_addressof(const T&& x) {
return std::addressof(x);
}

struct S {};

// NOTE: p only used until f returns.
void f(const S* p);

int main() {
f(unsafe_addressof(S{}));
return 0;
}

最佳答案

是的,您甚至不必将其设为 const

template <class T>
inline std::remove_reference_t<T>* unsafe_addressof(T&& x) {
return std::addressof(x);
}

struct S {};

// NOTE: p only used until f returns.
void f(const S* p);

int main() {
f(unsafe_addressof(S{}));
return 0;
}

现在 unsafe_addressof 将返回一个指向数组的指针、指向临时指针、指向左值的指针,或者您尝试让它返回指向的任何其他指针。

该指针有效性的生命周期是指向的事物的生命周期,无论它是从纯右值、xvalue 还是左值实例化的临时实例。

关于c++ - 将临时地址传递给带有指针参数的函数是否合法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46959706/

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