小编dte*_*ech的帖子

在矢量:: push_back内存明智的情况下会发生什么?

我的问题是关于它的效果vector::push_back,我知道它在向量的末尾添加了一个元素但是在引擎盖下面会发生什么?

IIRC内存对象是按顺序方式分配的,所以我的问题是是否vector::push_back只是在向量之后立即分配更多内存,如果是这样,如果该位置没有足够的可用内存会发生什么?或者也许在"结束"中添加指针以使向量"跳"到它继续的位置?或者只是通过将其复制到另一个有足够空间且旧副本被丢弃的位置来重新分配?或者别的什么?

c++ vector push-back

13
推荐指数
1
解决办法
1万
查看次数

C - 是不确定的不确定值吗?

根据这篇文章,不确定的价值是:

3.17.2
1 indeterminate value
either an unspecified value or a trap representation
Run Code Online (Sandbox Code Playgroud)

根据谷歌的说法,不确定性的定义是:

  • 不确定,已知或已建立
  • 可疑; 模糊.

根据thefreedictionary,可确定的是:

  • 能够被确定

根据merriam-webster,确定(在特定的上下文中)是:

  • 通过调查,推理或计算找出或做出决定

因此,常识规定尽管在编译期间不确定值是未知的,但它在运行时是完全可确定的,例如,您总是可以读取占用该内存位置的任何事件.

还是我错了?如果是这样,为什么?

编辑:为了澄清,我发布了与用户试图说服不确定值不确定的用户之间的争论,我非常怀疑.

编辑2:澄清,通过"可确定的"我并不意味着稳定或可用的值,即使它是未初始化的内存的垃圾值,仍然可以确定该垃圾的价值.我的意思是,试图确定这个价值仍会产生一些价值,而不是......没有行动.所以这个值必须来自一些内存,分配为仍然不确定的值的存储,我高度怀疑编译器实际上会使用一个随机数生成器只是为了提出一些任意值.

c undefined undefined-behavior language-lawyer

12
推荐指数
3
解决办法
752
查看次数

Qt Lite中的Qt Lite和配置更改

据称,Qt的配置工具经历了一些变化,必须能够制作更精简的Qt版本,即"Qt Lite".但是,似乎没有任何关于如何使用该功能的文档,或者至少我找不到任何文档,并且从发布公告中查看评论,其他人也不能.

更重要的是,这些变化肯定在那里,从我过去几年一直使用的配置以多种方式失败的事实来判断.我不确定内置帮助是如何最新的,因为上次我尝试使用它作为指导,结果发现它已经过时并且包含了不再支持的选项.

因此,如果有人能够了解已经改变的内容以及如何配置"Lite"版本,那将会很好.特别是在模块和功能依赖性方面,因为我认为我们都希望避免浪费时间在构建上,这些构建将开始构建,尽管不正确的配置省略了必要的依赖性,只是为了让它不可避免地失败并且只会浪费时间.

configuration qt build qt5.8 qt-lite

12
推荐指数
1
解决办法
3246
查看次数

Qt 5.8中的QML缓存是否可以针对特定项目禁用?

Qt 5.8应该是提前使用qtquick编译器的可选用法,而是它带有一个jit-jit编译器,默认情况下启用并在磁盘上缓存已编译的QML文件以提高启动性能并减少内存使用量.

然而,该功能带来了严重的 错误,这些错误大大减少,或者在我的情况下甚至完全否定了它的好处,因为我没有启动时间的问题,并且测试没有显示任何内存使用改进.

所以我想做的是在我的项目中选择退出该功能,但我似乎没有找到如何做到这一点.回到Qt 5.7.1不是一个选择,因为我的项目依赖于5.8引入的其他新功能.

configuration qt caching qml qt5.8

12
推荐指数
2
解决办法
3630
查看次数

QThread vs std :: thread

我在"pthread vs std :: thread"和"QThread vs pthread"上看到了不同的主题,但在"std :: thread vs QThread"中没有.

我必须编写一个软件来驱动3D打印机并需要使用线程.将有一个线程将不断检查安全性,另一个用于执行打印过程,一些用于分别驱动每个硬件组件(运动,喷射......)等等...该程序是用Windows开发的C++ 11/QT.

首先我想使用QThread,但在我看来,QThread不允许你像std :: thread那样做很多东西,例如,在阅读Anthony Williams的"C++ Concurrency in Action"时,我看到它是可能的要求std :: thread通过执行类似于std::thread t1(&Class::function, this, ...);QThread似乎无法执行的操作从另一个线程执行函数.

我想拥有的机制是一种说法,如果我想在当前线程或另一个线程中执行一个函数.

您会选择哪一个以及为什么?

c++ qt multithreading std qthread

11
推荐指数
3
解决办法
7677
查看次数

利用沙桥的硬件真随机数发生器?

我想知道是否有办法利用英特尔沙桥CPU中的新硬件真数发生器?我读到英特尔的MKL(数学内核库)公开了这个功能,但这需要MKL套件和英特尔编译器,结果相当昂贵.

有没有其他方法在我的C++代码中使用硬件随机数生成器?例如,一个不错的,仅标题库?

c++ hardware numbers intel generator

10
推荐指数
2
解决办法
4087
查看次数

"实时"代码和使用C++和LLVM JIT进行快速原型设计?

您可能已经看过Bret Victor的"实时"JS IDE,或者它启发的一些替代实现,扩展到其他语言,但仍然保持基于VM的.

然而,昨天,由于LLVM ,我偶然发现了同样的概念,适用于旧的C++.仍然是一个非常早期和不成熟的实施,但具有充足的潜力.

我对实现非常好奇,但作者已经并且可能不会将其公开发布.

所以我的问题是,如果有人知道如何实现类似功能的资源,我的意思是几乎即时编译和两个连接,提供代码的实时反馈,允许可视部分更改甚至生成和预览其他代码?

c++ jit compilation real-time llvm

10
推荐指数
1
解决办法
2372
查看次数

QtCreator新项目Qt Quick Controls vs. Qt Quick

我想在Qt Creator中创建新的Qt Quick项目,我已按下New project,在向导中选择了应用程序名称和位置,但后来我对下一个向导的步骤(Qt快速组件选择)感到困惑,如屏幕截图所示:

Qt Creator新项目向导Qt快速组件选择

我应该选择哪一套Qt Quick Controls 1.3,或Qt Quick 2.4?他们之间有什么区别?

qt qt-creator qml qtquick2 qtquickcontrols

10
推荐指数
1
解决办法
4652
查看次数

处理"取决于非NOTIFYable属性"警告

我有一个C++对象暴露给QML,带有"一种"只读属性,除了属性仍然需要从QML设置,所以它有一个WRITE定义的方法,但除了最初的强制设置,它永远不会改变,所以我觉得这NOTIFY是多余的,因为它在使用时已经设置了该值,并且它永远不会改变.

然而,QML并没有分享我的感觉,并且无论它喷出"表达式取决于非NOTIFYable属性"警告.

由于使用属性实例化对象的方式是设置该值的唯一适用方式,因此不可能使用可调用的setter,因为这将要求对象已经"完成"并且如果没有该值则无法真正完成.因此需要财产机制和WRITE方法,不幸的是导致Qt相信财产会发生变化.我尝试设置属性,CONSTANT但似乎没有与WRITE方法堆叠.

我已经把一个虚拟信号作为处理大量警告的临时措施,但我更愿意,如果有更优雅的方式来处理这个问题.同样,该设计实际上消除了在初始设置之后设置该值的可能性,但由于它是C++对象并且值需要基于每个对象设置,因此它也不适用于使用QML readonly property.有没有涉及冗余信号的解决方法?


只是为了澄清,这里的根本问题是,在当前状态下,QML几乎没有办法初始化用C++实现的对象的只读属性.这样的属性不会有一个setter(如果然后它会发出"依赖于......"的警告),并且没有办法将值传递给对象的构造函数.正如我在下面的回答中所描述的那样,围绕着这个问题,但它们要么应用有限,要么相当不方便.在C++中,您甚至可以在每个实例的基础上执行const成员的初始化,方法是将值传递给在初始化程序列表中进行初始化但不在QML中的构造函数.即使在纯QML中,只读属性必须在现场初始化,不可能使它们保持未初始化(readonly property type name没有: statement)并延迟直到实例化并获得每个实例的初始化(Obj { name : initValue }).你可以这样做:

Item { // T.qml
  readonly property int r : w
  property int w
}
...
T { w: value }
Run Code Online (Sandbox Code Playgroud)

但它......有点挫败了目的......并且考虑到一个属性只能在其实例化体中"绑定"一次,我认为这可以看作是初始化的行为,同时进一步分配或命令性重新绑定(Qt.binding())被禁止.没有冗余通知信号的setter可以做到这一点,但qtquick的实现设计假设如果它有一个setter它会改变,因此会抱怨它没有通知信号,IMO是一个设计监督 - 这是,没有提供任何方法在每个实例的基础上初始化QML端的只读属性.目前,正如我已经提到的,3种可能的解决方案要么有开销(有通知信号),限制(在创建对象之前设置值 - 仅适用于动态实例化)或主要不便(使用setter和getter slot而不实现实际属性接口).

c++ notifications qt properties qml

10
推荐指数
1
解决办法
3199
查看次数

QML垃圾收集删除仍在使用的对象

我曾多次遇到这个问题,动态创建对象,无论它们是用QML还是C++创建的.在仍在使用时删除对象,导致硬崩溃,没有明显原因.这些对象仍然被引用并且是其他对象的一部分,一直到根对象,所以我发现QML在它们的引用数仍然高于零时删除这些对象是很奇怪的.

到目前为止,我找到的唯一解决方案是使用C++创建对象并将所有权明确设置为CPP,从而无法从QML中删除对象.

起初我认为它可能是一个父母问题,因为我使用QObject派生类,动态实例化的QML方法传递Item一个父类,而QtObject甚至没有父属性 - 它没有公开QObject.

但后来我尝试了一个Qobject派生的暴露和使用育儿,最后甚至尝试使用Item只是为了确保对象是正确的父对象,但这种行为仍然存在.

这是一个产生这种行为的例子,遗憾的是我无法将其压平为单个源,因为Components 的深层嵌套会破坏它:

// ObjMain.qml
Item {
    property ListModel list : ListModel { }
    Component.onCompleted: console.log("created " + this + " with parent " + parent)
    Component.onDestruction: console.log("deleted " + this)
}

// Uimain.qml
Item {
    id: main
    width: childrenRect.width
    height: childrenRect.height
    property Item object
    property bool expanded : true
    Loader {
        id: li
        x: 50
        y: 50
        active: expanded && …
Run Code Online (Sandbox Code Playgroud)

javascript qt garbage-collection qml qtquick2

9
推荐指数
1
解决办法
2151
查看次数