草庐IT

c++11 在移动对象时调用类型转换

我有一个简单的代码,我在GCC5、6和8上编译代码并将其部署到使用gcc4.8.3的物理测试平台,由于某种原因,代码无法在测试平台上编译(ubuntu14.04),我一直在挠头想弄清楚问题是什么,但到目前为止一无所获。我复制了下面的代码,#include#includestructprobe_payload{intid{0};intsub_id{0};intsnd_ts{0};intrcv_ts{0};intrtt_ms{1000};doublesnd_bw_bps{0};boolend_flag{false};};structprobe_message{public:usingbuf

c++ - 在构造具有 const 成员的对象时调用另一个构造函数

我有一个包含const成员的类,一个构造函数调用另一个填充了额外值的构造函数。通常我可以为此使用冒号初始化器,但函数很复杂(printf/sprintf-like)并要求我在堆栈上使用一个变量,所以我必须在构造函数的主体中执行此操作并使用assign*this到新对象。但是当然这是无效的,因为我的成员变量是const。classA{public:A(intb):b(b),c(0),d(0)//requiredbecauseconst{intnewC=0;intnewD=0;myfunc(b,&newC,&newD);*this=A(b,newC,newD);//invalidbecau

c++ - 当 Base 和 Derived 都使用 Derived 类型参数进行模板化时调用 Base 构造函数时出现编译器错误

我很难理解为什么以下代码无法编译:templateclassBase{public:Base(inta){}};templateclassDerived:publicBase{public:Derived(inta):Base(a){}};intmain(){}在我的编译器(gcc5.4.0withC++11)上输出错误信息error:class'Derived'doesnothaveanyfieldnamed'Base'Derived(inta):Base(a){}我看到这有点类似于Templatebaseconstructorcallinmemberinitializationli

c++ - 安全调用运算符 - 仅在对象不为空时调用函数

在c++中有没有类似下面的东西:https://kotlinlang.org/docs/reference/null-safety.html#safe-calls我想缩短通话时间,如下所示:intx=0;IPtrpClass(...);if(pClass){pClass->...pClass->...x=pClass->function();}我可以使用任何宏/语言技巧来使它看起来像下面的伪代码吗?IPtrpClass(...);pClass?->...//onlycallfunctionifpClass!=nilpClass?->...//onlycallfunctionifpCla

c++ - 在调整窗口或拆分器大小时更改表格列宽

考虑有一个QTablWidget和一个QTextEdit。它们都处于水平QSplitte中。让QTable小部件有2列。问题是在通过使用鼠标移动拆分器进行调整大小操作时调整表格列的宽度。是否有任何选项可以让列与表格同步调整大小?谢谢。 最佳答案 QHeaderView*header=ui->tableWidget->horizontalHeader();header->setResizeMode(QHeaderView::Stretch);此代码将ui->tableWidget的所有列设置为等宽并让它自动更改。并查看文档中的QHea

c++ - 未实现赋值运算符时调用构造函数

我正在VisualStudio2015中练习“字符串”类实现(C++)。我的类(class)有3个构造函数,但没有任何赋值运算符。String();String(char_c);String(constchar*_pc);在main()中,我故意使用赋值运算符来检查代码的行为。令我惊讶的是,它没有给出任何错误并使用构造函数String(constchar*_pc)为对象赋值。此外,在作用域的末尾,它调用了两次析构函数。在这种情况下,编译器在幕后做什么?为什么?这是我的代码:classString{private:intcapacity;char*start;public://Const

c++ - 如何在退出时调用插槽

我想在我的Qt应用程序关闭之前更新我的数据库。我想要类似connect(this,SIGNAL(quit()),this,SLOT(updateDatabase()))一种方法是引入一个退出按钮,但是如果用户按下Alt+F4是否可以实现此功能? 最佳答案 使用信号aboutToQuit()相反。Thissignalisemittedwhentheapplicationisabouttoquitthemaineventloop,e.g.whentheeventloopleveldropstozero.Thismayhappeneith

c++ - 如何知道我的程序在运行时调用了哪个 'sin' 函数?

我正在使用不同版本的libm.a。我正在使用的一个是fdlibm的libm.a(来自Sun)。问题是我感觉我的程序没有调用fdlibm的libm.a中的函数,而是调用了系统的glibc的libm.a中的函数。#include"fdlibm.h"intmain(){doublex=sin(3);}程序是编译好的C++程序(因为要和其他c++程序链接):g++prog.cpplibm.a其中libm.a是fdlibm的。(来自孙,http://www.netlib.org/fdlibm/readme)问题1我怎么知道sin在运行时实际调用了什么?我听说过各种工具,例如objdump、gdb

c++ - prctl(PR_SET_PDEATHSIG, SIGNAL) 在父线程退出时调用,而不是在父进程退出时调用

我有一个正在fork到子进程的进程。如果父进程存在,则子进程不应存在。因此,我在子进程中调用::prctl(PR_SET_PDEATHSIG,SIGKILL)以在父进程死亡时将其杀死。最终发生的事情是父线程调用pthread_exit,该线程最终成为杀死子进程的催化剂。这是我的代码:父类.cpp:#include#include#include#include#includevoid*run(void*ptr){std::cout子.cpp:#include#include#include#includeintmain(){std::cout在命令行中运行以下命令:$./parent同

c++ - 启动时调试应用程序

我编写的64位Qt-Gui应用程序在尝试从visualstudio启动时崩溃并显示以下消息:Theapplicationwasunabletostartcorrectly(0xc000007b).ClickOKtoclosetheapplication.没有编译错误。应用程序在尝试加载所有调试符号、DLL和库时崩溃。在这种情况下有任何调试指示吗? 最佳答案 该错误消息通常意味着当加载程序正在处理依赖项时,无法加载依赖的DLL之一(未找到、损坏的文件、不兼容、其自身依赖项之一的问题、DllMain返回错误)。DependencyWal