草庐IT

Initialization

全部标签

c++ - 原始数据类型的构造函数

是inti(10);和一样inti=10;这两种方法有什么区别? 最佳答案 引用标准(§8.5/14):Theformofinitialization(usingparenthesesor=)isgenerallyinsignificant,butdoesmatterwhentheinitializerortheentitybeinginitializedhasaclasstype;seebelow.所以在你的情况下,没有区别(“见下文”指的是复制初始化和直接初始化之间的区别,但是当我们谈论int时,这不是兴趣在这里)。

qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed

方法一:如果是https,改为http。方法二:Qt解决qt.network.ssl:QSslSocket::connectToHostEncrypted:TLSinitializationfailed问题-CSDN博客其他: 

c++ - 复制初始化和直接初始化的混淆

考虑简单的语句(取自IsthereadifferenceinC++betweencopyinitializationanddirectinitialization?):Ac2=A();Thisstatementvalue-initializesatemporaryandthencopiesthatvalueintoc2(Read5.2.3/2and8.5/14).Thisofcoursewillrequireanon-explicitcopyconstructor(Read8.5/14and12.3.1/3and13.3.1.3/1)[注意上面段落中的粗体句子]->我的问题是为什么?现

c++ - 列表初始化(使用花括号)有什么好处?

MyClassa1{a};//clearerandlesserror-pronethantheotherthreeMyClassa2={a};MyClassa3=a;MyClassa4(a);为什么? 最佳答案 基本上是从BjarneStroustrup的“C++编程语言第4版”中复制和粘贴:列表初始化不允许缩小(§iso.8.5.4)。即:一个整数不能转换为另一个不能保存其值的整数。例如,字符允许转换为int,但不允许转换为char。一个浮点值不能转换成另一个不能容纳它的浮点类型值(value)。例如允许floattodouble

c++ - 为什么 c++ 编译器接受这个初始化?静态整数 x = x;

我刚知道这个:staticintx=x;为什么C++编译器接受这个初始化?我会称之为编译器异常,但有人可能会对此给出一个很好的解释。因此,对于具有静态存储的数据,可以使用自身初始化变量...我已经使用VS2015和VS2017编译器以及其他一些在线C++编译器进行了尝试。 最佳答案 static和非static变量其实是一样的。名称在其声明符之后和初始化之前(如果有的话)立即变得可见。因此在staticintx=x;名称x在第一次出现后立即可见,并且可以在初始化程序中引用。因为它是静态的,所以它的初始值是明确定义的(它是0)。这也是

c++ - 内存屏障 : How to ensure initialization writes are seen by worker threads?

我对使用内存屏障/栅栏进行编程还很陌生,我想知道我们如何才能保证设置写入在随后在其他CPU上运行的辅助函数中可见。例如,请考虑以下内容:intsetup,sheep;voidSetupSheep()://RunonceCPU1:setup=0;...muchlaterCPU1:sheep=9;CPU1:std::atomic_thread_fence(std::memory_order_release);CPU1:setup=1;之后运行(不是并发),很多很多次:voidManipulateSheep():CPU2:intmySetup=setup;CPU2:std::atomic_t

c++ - 有没有办法仅在实例化特定类模板(特化)时调用初始化函数?

我正在为各种计算功能设计一个包装器。一些底层后端需要在进行任何其他API调用之前调用一些init函数。我可以使用一些在main之前初始化的静态变量,并将其包装在某个函数中,如here所述这样我就可以捕获初始化期间产生的任何错误。我想知道是否有更好的方法来处理这个问题。请注意,永远不会有类模板的实例,因为一切都是typedef或静态成员。 最佳答案 为了解决初始化API仅为某些特化的问题,并且只初始化一次,我会做这样的事情:#includetemplatestructWrapper{//classwhowillbestatically

c++ - 获取默认初始化(非值/零初始化)的 POD 作为右值

#includestructA{intx;};voidfoo(Aa){std::cout是否可以将A类型的右值传递给foo()而无需对其进行值初始化?我们必须使用值初始化还是左值?您可能会问,如果“成本”不超过10纳秒,那么避免进行值初始化有什么意义呢?像这样的情况怎么样:我们正在寻找遗留应用程序中由valgrind的未初始化内存访问引起的错误,并且零不被视为该应用程序的有效值。值初始化将阻止valgrind发现未初始化内存访问的位置。您可能会说打印未初始化的值是一个UB,但我的“真实”用例不限于打印。没有它,我的问题应该仍然有效。 最佳答案

c++ - 列表初始化是否将原子初始化为零?

问题:是否std::atomica{};初始化a(归零)还是不?背景:通常,我希望Ta{};要么给出编译时错误,要么确保a已初始化并可以使用。要么是因为T是一种基础/类似POD的类型,关于聚合/零/值/列表初始化的语言规则导致所有内容都被初始化为零(我忘记了到底是什么)或者因为默认构造函数被调用,它“通常”带来对象进入可用状态。当然,需要(不仅允许)双重初始化的类存在,但似乎相当罕见——尤其是在标准库中。但是,std::atomic的构造函数的文档说1)Thedefaultconstructoristrivial:noinitializationtakesplaceotherthanz

c++ - 如何强制 MSVC 编译器省略大型临时对象的堆栈分配?

这个问题不是thisone的重复问题或其他类似问题。这个问题是关于在初始化和使用后清除一个结构。更新在阅读了您的前几条评论后,我想澄清一下我的问题:如何强制MSVC编译器省略大堆栈分配?我更新了标题、文本和下面的代码以阐明这一点。我最近开始使用/GS、/sdl和/analyze编译器选项编译我的项目。(MicrosoftVisualC++2015)使用这些选项,编译器可以正确警告有问题的代码结构。但是,我遇到了一些我一直认为是好的C++风格的警告。请看下面的示例代码:structmy_struct{charlarge_member[64000];};voiddo_something_e