C++ 如何获取初始值设定项的地址?
下面的代码介绍了一个C类。该类有构造函数、复制构造函数、运算符=和一个成员。如何在函数main()中获取C(2)创建的对象的地址C++ 如何获取初始值设定项的地址?,c++,C++,下面的代码介绍了一个C类。该类有构造函数、复制构造函数、运算符=和一个成员。如何在函数main()中获取C(2)创建的对象的地址 #包括 C类 { 公众: INTA; C(施工C和其他) { std::cout您可以使用helper函数在对象超出范围之前的某个位置写入地址: template <typename T> T const & store_possibly_invalid_address(T const & t, T const *& p) {
#包括
C类
{
公众:
INTA;
C(施工C和其他)
{
std::cout您可以使用helper函数在对象超出范围之前的某个位置写入地址:
template <typename T>
T const & store_possibly_invalid_address(T const & t, T const *& p)
{
p = &t;
return t;
}
int main()
{
C a(1);
C const * invalid_address;
a = store_possibly_invalid_address(C(2), invalid_address);
// The temporary is out of scope, but you can see where it was.
// Don't dereference the pointer.
}
模板
T常量和存储地址可能无效(T常量和T,T常量*&p)
{
p=&t;
返回t;
}
int main()
{
C a(1);
C const*无效的_地址;
a=存储地址可能无效(C(2),无效地址);
//临时文件不在范围内,但您可以看到它的位置。
//不要取消对指针的引用。
}
发现编译器选择将临时地址放在何处可能是很有教育意义的。但是,这在任何实际代码中都没有任何意义。你不能。你被禁止获取临时地址。它们会很快超出范围,给你留下一个无效的地址。唯一的方法是在类内进行一些协作;而E
构造函数有地址(这个指针是this
),并且可以把它放在
你以后可以去的地方我建议你不要去,
尽管如此,因为这个物体的寿命不足以让你做很多事情
另一方面,它有时对调试输出非常有用
它。)你想对地址做什么?同意。你可以用黑客破解它,但正如你所见,任务完成后会立即调用d-tor,你仍然需要使用-fpPermission进行编译,否则编译器不会让你这么做。你能给我指一个确认你状态的授权来源吗?你的意思是临时对象是否可以在关闭前消失}?在这里,您可以看到具有销毁顺序的代码:@RomanB:在这种情况下,我的gcc是我的授权源(其错误为error:taking address of temporary
)。是的,临时对象可以在其封闭块结束之前消失。谢谢你们,你们太棒了!
template <typename T>
T const & store_possibly_invalid_address(T const & t, T const *& p)
{
p = &t;
return t;
}
int main()
{
C a(1);
C const * invalid_address;
a = store_possibly_invalid_address(C(2), invalid_address);
// The temporary is out of scope, but you can see where it was.
// Don't dereference the pointer.
}