草庐IT

目的性

全部标签

c++ - 存在完美的转发构造函数时,按左值引用转发构造函数的目的是什么?

我们以std::pair为例举个例子。它有以下两个构造函数:constexprpair(constT1&x,constT2&y);//#1templateconstexprpair(U1&&x,U2&&y);//#2似乎#2可以处理#1可以处理的所有情况(性能不会变差),除了参数是列表初始化器的情况。例如,std::pairp({0},{0});//ill-formedwithout#1所以我的问题是:如果#1仅用于列表初始化参数,因为x和y最后绑定(bind)到从列表初始化器初始化的临时对象,为什么不使用constexprpair(T1&&x,T2&&y);反而?否则,#1的实际意图

c++ - 出于加密目的,对象销毁是否可靠?

作为thisquestion的后续,我在想象一个存储敏感数据的类,比如加密key。为了简化事情,假设不涉及继承。structCredential{std::arraysecretStuff;~Credential(){memset_s(secretStuff.data(),32,0,32);}}我正在尝试确定这种类型的对象是否保证运行其析构函数,或者我是否需要做某事fancy就像使用分配器来确保删除内存一样。我对针对编译器优化的弹性很感兴趣,因此我正在寻找标准中的章节和章节来确保我无论如何都会获得正确的行为。在前面的问题中,已确定自动分配和static存储中的对象保证运行其析构函数。我

c++ - 从 `binding` 到 `VkVertexInputBindingDescription` 的目的是什么?

https://www.khronos.org/registry/vulkan/specs/1.0/man/html/VkVertexInputBindingDescription.htmlbindingisthebindingnumberthatthisstructuredescribes.我不确定这意味着什么,例如https://github.com/SaschaWillems/Vulkan/blob/master/triangle/triangle.cpp#defineVERTEX_BUFFER_BIND_ID0....vertices.inputAttributes[0].bi

c++ - api 特定类型定义的目的是什么,例如 GLsizei GLint GLvoid?

API特定类型定义(例如GLsizeiGLintGLvoid)的目的是什么?我在C和C++代码中随处可见。基本类型通常使用库前缀/后缀进行类型定义。这背后的原因是什么?这是好习惯吗?我的程序应该自己做类似的事情吗?乍一看,这似乎让代码的可读性降低了一点。你必须花点时间在脑海中将GLint翻译成int,这是一个简单的例子。像UINT这样的东西对我来说更重要,至少这将unsignedint缩短为四个字母。 最佳答案 这不是关于缩短名称,而是关于可移植性。不同的平台需要以不同的方式对这些内容进行类型定义。在Std-C中,long可能是32

c++ - 宏定义中双重否定的目的是什么,比如 (!!(expr))?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:DoubleNegationinC++code.我正在阅读代码库,并找到类似这样的内容:#defineuassert(msgid,msg,expr)(void)((!!(expr))||(uasserted(msgid,msg),0))我不明白为什么使用(!!(expr))而不是单个(expr)。无论如何,双重否定意味着肯定,不是吗?我错过了什么吗?

c++ - 那么现在 struct 可以有虚函数并支持继承吗?那么与 classes 有什么区别呢?信息隐藏的真正目的是什么?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:WhatarethedifferencesbetweenstructandclassinC++http://www.cplusplus.com/reference/std/typeinfo/type_info/我想我的“老师”并没有告诉我很多关于C++中结构和类之间的区别。我在其他一些关于继承的问题中读到,默认情况下结构是公共(public)的...我也猜想结构没有构造函数/析构函数...那么还有哪些区别呢?它们有那么重要吗?当谈到私有(private)/protected属性/方法时,它们在运行时不可访问,

c++ - 如何使用 QTreeView 获取有关所选项目的详细信息?

我像这样将QTreeView与QDirModel一起使用:QDirModel*model=newQDirModel;ui->treeView->setModel(model);ui->treeView->setSelectionMode(QTreeView::ExtendedSelection);ui->treeView->setSelectionBehavior(QTreeView::SelectRows);这工作正常,但是,我不确定如何获取有关我选择的文件的详细信息。到目前为止我已经知道了:QModelIndexListlist=ui->treeView->selectionMod

C++:在小项目的头文件中编写整个类的缺点?

只是一个风格问题...我是一个独立工作的低级独立游戏开发者,我养成了在标题中编写整个类的“坏”习惯。我知道.h/.cpp文件组合的一些好处是它们允许将代码拆分为编译block,只要它们保持不变就不需要重新编译。并允许从实现中分离接口(interface)。但是,这些都对我没有任何好处,因为我倾向于将我的实现放在一个我可以轻松改进、更改和阅读的地方。我的编译时间几乎是瞬时的(2-4秒,如果我将SFML或Box2D更新到它们的最新版本并且它们也需要重新编译,则需要15秒)我认为这样的编码为我节省了大量时间,而且由于文件较少,我的代码对我来说不那么“压倒性”。但鉴于此,一般来说,对于编译时间

c++ - --enable-auto-import 警告的目的

我正在尝试编译以下程序:#includeintmain(){std::cout当我编译它时,我得到这个消息:C:\programs>g++test.cppInfo:resolvingstd::coutbylinkingto__imp___ZSt4cout(auto-import)c:/mingw/bin/../lib/gcc/mingw32/4.5.0/../../../../mingw32/bin/ld.exe:warning:auto-importinghasbeenactivatedwithout--enable-auto-importspecifiedonthecommandl

c++ - 在执行函数指针时,使用地址运算符与不使用它的目的是什么?

对于以下代码片段,为什么我要使用一个赋值而不是另一个?谢谢voidaddOne(int&x){x+=1;}void(*inc)(int&x)=addOne;//whatisthepurposeofdoing"addOne"void(*inc)(int&x)=&addOne;//vs&addOne??inta=10;inc(a); 最佳答案 一个优于另一个的目的是C兼容性。C表示函数会自动衰减为指向函数的指针。为了兼容,C++也必须这样做。请注意,当C++引入新的函数指针类型(成员函数指针)时,它们不会自动衰减。因此,如果C++委员会