草庐IT

c++ - 当对象超出范围时执行一些代码

有时我想确保在从另一个函数返回之前执行了一些函数调用,或者一个整数被递减。例如考虑这段代码:voiddoSomething(){try{..........return;...............return;......}catch(...)}myvariable--;}我想确保myvariable始终递减,无论是否存在异常或返回调用。在C++中是否有任何内置对象用于此目的,或者我应该创建自己的类来接受std::function并在对象超出对象析构函数的范围时执行它?例如,在C#中有try..catch...finallyblock,您可以在finally中放置任何要在函数返回之

c++ - 为什么只有一些 C++ 模板实例导出到共享库中?

我有一个C++动态库(在macOS上),它有一个模板化函数,带有一些在公共(public)API中导出的显式实例化。客户端代码只能看到模板声明;他们不知道其中发生了什么,并且依赖这些实例化在链接时可用。出于某种原因,这些显式实例中只有一部分在动态库中可见。这是一个简单的例子://libtest.cpp#defineVISIBLE__attribute__((visibility("default")))templateTfoobar(Targ){returnarg;}templateintVISIBLEfoobar(int);templateint*VISIBLEfoobar(int*

c++ - #include <string> 在 header 中定义了一些结构。错误 : string does not define a type

#ifndefSTRCUTS_H#defineSTRCUTS_H#includestructmenuEntry{stringitemID;//'string'doesnotnameatypestringitemName;//'string'doesnotnameatype};#endif当我将#include放在header保护上方时,我得到了同样的错误。想一想,我以前在将结构定义放在标题中时遇到过奇怪的麻烦。一定是我没有得到的东西。 最佳答案 您需要将string更改为std::string,即#ifndefSTRCUTS_H#d

针对使用eslint,阻止报错的一些常见注解

 前提:在写项目时,eslint会报一些不必要的错误影响项目的运行在ESLint的规则配置中,数字表示规则的严重程度,规则的严重程度有三个级别:0或者“off”:关闭规则,不进行检查。1或者“warn”:打开规则,并将其视为一个警告(不会导致程序退出)。2或者“error”:打开规则,并将其视为一个错误(会导致程序退出)配置eslint的规则需要在.eslintrc.js文件的rules配置项中进行//这段代码是一个针对Vue.js的ESLint规则配置,该规则是用来限制每行中最大的属性数量"vue/max-attributes-per-line":[2,{"singleline":10,//

c++ - solaris (x86) 上std::basic_string 的一些疑惑

solaris(x86)上std::basic_string的一些困惑#include#includeintmain(){constwchar_t*s=L"abcdef";std::wstringws(s,s+6);for(inti=0;i运行结果为:9799101000为什么不是979899100101102代码#include#includeintmain(){constwchar_t*s=L"abcdef";std::wstringws;ws.resize(6);for(inti=0;i可以得到预期的结果。我使用gcc3.4.6,构建命令是g++-fshort-wcharstri

c++ - 关于指针的一些问题

我在读高中三年级,目前正在学习C++。由于我们已经完成了我们需要了解的关于一般编程的所有内容(循环、if语句、函数、结构、数组和二维数组),我们开始了二进制/文本文件,我认为在我们学习文件的同时学习内存管理。首先,我现在正在尝试学习指针,因为如果我理解正确的话,在OOP中它们是必须的。其次,我想知道计算机是如何工作的,正在发生的事情背后是什么。现在,我制作了这一小段代码intmain(){chary;char*x;x=&y;cout>x;cout它可以工作,但是当程序关闭时,我收到一条错误消息,指出变量“y”周围的堆栈已损坏。如果我没有混淆,堆栈是动态内存,堆是静态内存,想想我得到这个

c++ - 使用新的控制台窗口创建进程,但覆盖一些标准的 i/o 句柄

如果您使用带有标志CREATE_NEW_CONSOLE的CreateProcess,新进程会将其标准输入、输出和错误句柄定向到新的控制台窗口。如果您想覆盖I/O流,您可以通过在STARTUPINFO字段hStdOutput、hStdInput和hStdError中设置句柄并设置标志STARTF_USESTDHANDLES来实现。但是如果您只想覆盖其中一个句柄怎么办?例如,我可能想将stderr重定向到一个文件,同时让stdout和stdin连接到新的控制台窗口。STARTF_USESTDHANDLES标志告诉CreateProcess替换所有句柄,而不是将它们连接到新控制台窗口的句柄。

c++ - std::transform with lambda: 跳过一些项目

我有一些C++11代码,比如std::vectornames;std::mapfirst_to_last_name_map;std::transform(names.begin(),names.end(),std::inserter(first_to_last_name_map,first_to_last_name_map.begin()),[](conststd::string&i){if(i=="bad")returnstd::pair("bad","bad");//Don'tWantThiselsereturnstd::pair(i.substr(0,5),i.substr(5,

c++ - 测试 AVX 寄存器是否包含一些相等的整数

考虑一个包含四个64位整数的256位寄存器。是否有可能在AVX/AVX2中有效地测试其中一些整数是否相等?例如:a){43,17,25,8}:结果必须是false因为4个数字中没有2个是相等的。b){47,17,23,17}:结果必须为“真”,因为编号17在AVXvector寄存器中出现2次。如果可能的话,我想在C++中执行此操作,但如有必要,我可以转到汇编。 最佳答案 对于AVX512(AVX512VL+AVX512CD),您将使用VPCONFLICTQ,专为此目的而设计。对于AVX2:通过减少冗余比较减少了一些操作:inttes

c++ - 无论如何要从他们的 vtable 重建一些保存的类?

我正在将一些对象复制到一个文件中,它们都派生自同一个类。但我希望能够在加载它们之后调用它们的函数来执行该类应该执行的操作,这是我到现在为止所做的:#include#includeusingnamespacestd;structa{virtualvoidprint(){coutprint();testifile.read((char*)x,sizeof(b));x->print();}我的示例工作正常,但如果我注释保存部分然后运行程序,则vtable似乎对新运行的应用程序无效(尽管我的代码中没有任何更改)。问题是我的文件管理器类不知道所有可能从我的基础对象派生的对象,我想重建我所有的应用