使用在指定初始化程序中初始化的變量

異形

我可以使用在指定初始化程序中初始化的變量嗎?

考慮以下清單:

struct A {
    int a;
    int * const a_ptr;
};

struct A foo(int a) {
    struct A result = {
        .a = a,
        .a_ptr = &result.a
    };

    return result;
}

demo

我可以result在這個指定的初始化表達式中使用嗎?這種行為有定義嗎?此代碼可移植嗎?

更新

我的不好,該示例包含潛在的堆棧損壞。清單應該是:

struct A {
    int a;
    int * const a_ptr;
};

void foo(int a) {
    struct A result = {
        .a = a,
        .a_ptr = &result.a
    };

    bar(&result);
}
灌木叢

初始化本身很好。

result聲明時,其地址(以及其字段的地址)是常量。所以&result.aresult.

什麼一個問題,不過是,你回來這個結構的副本。此副本包含不再存在的局部變量的地址,因此嘗試使用a_ptr返回結構成員的值將觸發未定義行為

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Lateinit 變量未在 TestNG 的 @BeforeSuite 中初始化

變量尚未在 Java 中初始化

未初始化的局部變量使用 C++

初始化程序不会覆盖其父类中的指定初始化程序

是否可以使用便捷初始化程序覆盖指定的初始化程序?

如何使用C ++ 20指定的初始化程序在结构中初始化联合

在空構造函數中初始化字段變量是否比在聲明時初始化更好?

什么是指定的初始化程序?

使用聚合初始化和成员初始化程序初始化结构

在Xcode 6中关闭指定的初始化程序检查

如何在指定的初始化程序中引用参数?

將變量初始化為命名參數

如何初始化和更新角度變量

指定的初始化程序仅应在“ super”上调用指定的初始化程序。使用协议时?

指定的初始化程序仅应在“ super”上调用指定的初始化程序

Swift初始化程序中的错误

在Rails中调试初始化程序

协议中的默认初始化程序

实例初始化程序中的StackOverflowError

Flutter:初始化程序中的条件

未使用初始化程序的结果?

所需的初始化程序和指定的初始化程序有什么区别?

初始化程序不会覆盖指定的初始化程序Swift WatchKit

如何引用在函数中初始化的列表?(Python)

系統會自動初始化函數Scaffold中的變量innerPadding嗎?

SwiftUI 初始化將存儲在 UserDefaults 中的變量

如何在 JavaScript 中將類變量初始化為空數組?

循環中的局部字符串變量初始化

如何使用變量初始化新的 Firebase @FirestoreQuery 屬性包裝器?