gpt4 book ai didi

c++ - 最简单的 “error: taking the address of a temporary object”修复程序?

转载 作者:行者123 更新时间:2023-12-01 14:33:26 26 4
gpt4 key购买 nike

struct context* ctx = &(struct context){ 0 };
我正在尝试使用 clang++ C++编译器来编译C代码,可能只需很少的代码更改。
对于上面的代码,我得到了错误: error: taking the address of a temporary object of type 'struct context' [-Waddress-of-temporary]
  • 是否有编译器开关可以让其承受这种构造?
  • 使使用clang++进行此类代码编译的最小代码更改是什么?也许以下?

  • 一种)
        struct context* ctx;   
    struct context tmp = { 0 };
    ctx = &(tmp);
    b)
        struct context* ctx;   
    {
    struct context tmp = { 0 };
    ctx = &(tmp);
    }
    注意:
  • 编译
  • 时使用
  • 选项
  • -std=c++2a似乎可以容忍(支持?)指定的初始化程序
  • 选项b)也可以编译精细的
  • 最佳答案

    Is there a compiler switch to make it tolerate such constructs?`

    -Wno-address-of-temporary ...
    但这将是错误的。在C++中编译此类代码将导致悬空指针指向生命周期结束的对象的内存。临时生存期在该代码中的 ;上结束-分配后,指针无效。

    What's the smallest code change to make such code compile using clang++? Maybe the following?


    代码 b)容易出错-它留下一个指向生命周期已结束的对象的指针。
    我猜“最小”可能是:
    // in C++
    context a,*ctx=&a;
    // in C
    struct context a={0},*ctx=&a;
    哎呀,最小的更改是将compund文字移至上一行。
    struct context t = {0};
    struct context* ctx = &t;

    关于c++ - 最简单的 “error: taking the address of a temporary object”修复程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63130256/

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