gpt4 book ai didi

c++ - 常量 QList 警告 = QList() << 0; gcc 4.7.2 的段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:59 26 4
gpt4 key购买 nike

因此主题行中提到的代码会导致 Qt 4.8.3 和 gcc 4.7.2 出现段错误

这在 .cpp 文件中的任何类/结构之外,适用于 gcc 4.4

const QList<int> warnings = QList<int>() << 0 << 3 << 7;

Traces 给出了这两个提示:

__do_global_ctors()
__static_initialization_and_destruction_0

所以当它插入后面的列表时,似乎“警告”还不可用。

如果我把它改成这样,就可以与 4.7.2 一起工作:

global scope: QList< int> warnings;

这是一些函数:

warnings = QList<int>() << 0 << 3;

我想知道为什么会这样?

编辑:

我想我最初从我的问题中删掉了太多东西,但是警告应该在文件范围(.cpp 文件)中是 const 以保存一堆枚举。

最佳答案

我的心理调试能力告诉我,有问题的行存在于全局/文件范围内,而不是类/函数范围内。因此,您的行可能会在静态初始化期间的任何时候被调用。使用您的旧 gcc 时,QT 刚好在您的线路被调用之前被初始化。使用新的 gcc,它重新排序(完全合法)静态 init 以首先调用您的函数,然后 QT 准备好创建对象并将其插入其中。

解决方案是在 main 启动之后才创建 QList。使用指针或静态本地对象是两种常见的实现方式。

关于c++ - 常量 QList<int> 警告 = QList<int>() << 0; gcc 4.7.2 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13270738/

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