Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取初始值设定项的地址?_C++ - Fatal编程技术网

C++ 如何获取初始值设定项的地址?

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类。该类有构造函数、复制构造函数、运算符=和一个成员。如何在函数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)
{
    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.
}