我的问题是关于它的效果vector::push_back
,我知道它在向量的末尾添加了一个元素但是在引擎盖下面会发生什么?
IIRC内存对象是按顺序方式分配的,所以我的问题是是否vector::push_back
只是在向量之后立即分配更多内存,如果是这样,如果该位置没有足够的可用内存会发生什么?或者也许在"结束"中添加指针以使向量"跳"到它继续的位置?或者只是通过将其复制到另一个有足够空间且旧副本被丢弃的位置来重新分配?或者别的什么?
根据这篇文章,不确定的价值是:
3.17.2
1 indeterminate value
either an unspecified value or a trap representation
Run Code Online (Sandbox Code Playgroud)
根据谷歌的说法,不确定性的定义是:
根据thefreedictionary,可确定的是:
根据merriam-webster,确定(在特定的上下文中)是:
因此,常识规定尽管在编译期间不确定值是未知的,但它在运行时是完全可确定的,例如,您总是可以读取占用该内存位置的任何事件.
还是我错了?如果是这样,为什么?
编辑:为了澄清,我发布了与用户试图说服不确定值不确定的用户之间的争论,我非常怀疑.
编辑2:澄清,通过"可确定的"我并不意味着稳定或可用的值,即使它是未初始化的内存的垃圾值,仍然可以确定该垃圾的价值.我的意思是,试图确定这个价值仍会产生一些价值,而不是......没有行动.所以这个值必须来自一些内存,分配为仍然不确定的值的存储,我高度怀疑编译器实际上会使用一个随机数生成器只是为了提出一些任意值.
据称,Qt的配置工具经历了一些变化,必须能够制作更精简的Qt版本,即"Qt Lite".但是,似乎没有任何关于如何使用该功能的文档,或者至少我找不到任何文档,并且从发布公告中查看评论,其他人也不能.
更重要的是,这些变化肯定在那里,从我过去几年一直使用的配置以多种方式失败的事实来判断.我不确定内置帮助是如何最新的,因为上次我尝试使用它作为指导,结果发现它已经过时并且包含了不再支持的选项.
因此,如果有人能够了解已经改变的内容以及如何配置"Lite"版本,那将会很好.特别是在模块和功能依赖性方面,因为我认为我们都希望避免浪费时间在构建上,这些构建将开始构建,尽管不正确的配置省略了必要的依赖性,只是为了让它不可避免地失败并且只会浪费时间.
我在"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似乎无法执行的操作从另一个线程执行函数.
我想拥有的机制是一种说法,如果我想在当前线程或另一个线程中执行一个函数.
您会选择哪一个以及为什么?
我想知道是否有办法利用英特尔沙桥CPU中的新硬件真数发生器?我读到英特尔的MKL(数学内核库)公开了这个功能,但这需要MKL套件和英特尔编译器,结果相当昂贵.
有没有其他方法在我的C++代码中使用硬件随机数生成器?例如,一个不错的,仅标题库?
您可能已经看过Bret Victor的"实时"JS IDE,或者它启发的一些替代实现,扩展到其他语言,但仍然保持基于VM的.
然而,昨天,由于LLVM ,我偶然发现了同样的概念,适用于旧的C++.仍然是一个非常早期和不成熟的实施,但具有充足的潜力.
我对实现非常好奇,但作者已经并且可能不会将其公开发布.
所以我的问题是,如果有人知道如何实现类似功能的资源,我的意思是几乎即时编译和两个连接,提供代码的实时反馈,允许可视部分更改甚至生成和预览其他代码?
我想在Qt Creator中创建新的Qt Quick项目,我已按下New project
,在向导中选择了应用程序名称和位置,但后来我对下一个向导的步骤(Qt快速组件选择)感到困惑,如屏幕截图所示:
我应该选择哪一套Qt Quick Controls 1.3
,或Qt Quick 2.4
?他们之间有什么区别?
我有一个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而不实现实际属性接口).
我曾多次遇到这个问题,动态创建对象,无论它们是用QML还是C++创建的.在仍在使用时删除对象,导致硬崩溃,没有明显原因.这些对象仍然被引用并且是其他对象的一部分,一直到根对象,所以我发现QML在它们的引用数仍然高于零时删除这些对象是很奇怪的.
到目前为止,我找到的唯一解决方案是使用C++创建对象并将所有权明确设置为CPP,从而无法从QML中删除对象.
起初我认为它可能是一个父母问题,因为我使用QObject
派生类,动态实例化的QML方法传递Item
一个父类,而QtObject
甚至没有父属性 - 它没有公开QObject
.
但后来我尝试了一个Qobject
派生的暴露和使用育儿,最后甚至尝试使用Item
只是为了确保对象是正确的父对象,但这种行为仍然存在.
这是一个产生这种行为的例子,遗憾的是我无法将其压平为单个源,因为Component
s 的深层嵌套会破坏它:
// 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)