c++相关内容

获取宏中函数的返回类型(C++)

我有ASSERT(x)宏,如果它断言(在发布配置中),我想调用return。 要做到这一点,我需要知道使用ASSERT的函数的返回类型。如何获取(我处理C++03,LLVM GCC 4.2编译器)? 我的Assert宏: #define ASSERT(x) if(!(x)) { LOG ("ASSERT in %s: %d", __FILE__, __LINE ..
发布时间:2022-08-26 11:47:44 C/C++开发

在GDB中中断失败断言的正确方法是什么?

我正在尝试捕获程序中失败的断言。我正在使用一个直接调用Assert()的库,而不是一个定制函数或宏,目前我正试图在这个库中跟踪几个与移植相关的错误。所有涉及的内容都已在g++中使用调试符号进行了编译。 我所找到的最佳解决方案是在Assert的file:行中使用Assert表达式的条件断开。这允许在断言失败之前停止,但这是一个可怕的解决方案。它需要为每个可能失败的断言进行特殊设置,在我的IDE ..
发布时间:2022-08-26 11:28:29 C/C++开发

增加C/C++程序使用的(非堆栈)内存

我在一个内存为12 GB的Windows操作系统上运行一个内存密集型作业。根据我的计算,4 GB的内存应该足以运行该程序。我正在运行我用动态内存分配编写的程序(我有两个版本的程序,分别是malloc/free和new/delete))。 当我打开任务管理器时,我看到该程序似乎只使用了大约2 GB的RAM,即使我有更多的可用空间,并且页面文件大小当前设置为30 GB。有什么方法可以让CodeB ..
发布时间:2022-08-25 17:03:36 C/C++开发

编译时计算基类的偏移量

我想知道是否可以在编译时计算基类偏移量。当然,在运行时很容易做到这一点,因为可以利用static_cast的功能,而偏移量只是指向派生类的指针的基指针之间的差异。 我第一次尝试在编译时获取它,结果如下所示: struct InterfaceRoot {}; struct IInterface1 : InterfaceRoot { virtual void MethodI1() ..
发布时间:2022-08-24 10:37:37 C/C++开发

为什么std::VECTOR要初始化其内容?

假设我想创建一个vector并在其上调用iota: std::vector v(1000); std::iota(begin(v),end(v),0); 向量实际上是在构造函数中0初始化的。问题与以下情况相同: std::vector v; v.resize(1000); 我可以使用reserve,但无法调用iota。而且我也看不到不零初始化的好办法(也许是 ..
发布时间:2022-08-23 13:07:11 C/C++开发

Std::向量和指针可预测性

当您将push_back()项转换为std::vector并通过back()引用保留指向向量中对象的指针时--您是否保证(假设不发生删除)向量中对象的地址将保持不变? 我的向量似乎更改了我使用的对象的指针,因此如果我将10个项目放入其中,并通过记住每个push_back后的back()引用来保留指向这10个项目的指针。 如果您的向量要存储对象,而不是指向对象的指针,则这些对象的地址是否 ..
发布时间:2022-08-23 13:01:35 C/C++开发

将向量的矢量转换为指针的指针

假设我有一个以指针指针为参数的C库API函数。然而,由于我是用C++编程的,所以我想利用STD向量来处理动态内存。如何有效地将向量的矢量转换为指针的指针?我现在正在使用这个。 #include /* C like api */ void foo(short **psPtr, const int x, const int y); int main() { ..
发布时间:2022-08-23 12:40:25 C/C++开发

C++使用for循环的最佳方式

我有一个问题浮现在我的脑海里... 我有一个std::向量来迭代: 迭代的最佳方式(更快)是什么? 以下是使用迭代器的代码: // using the iterator for( std::vector ::iterator it = myObject.begin( ); it != myObject.end( ); it++ ) { (*it)->some ..
发布时间:2022-08-23 12:36:03 C/C++开发

已经广泛存在的类似载体的容器有哪些变体?我必须写我自己的书吗?

在我的程序中,我经常需要拥有一个像数组一样的容器--即用于连续存储在内存中的数据,但向量太灵活了,没有它应有的实用或效率。 需求与std::vector在一个或多个方面不同,例如: 只能在结尾处插入元素,不能移动其他元素 构建/编译后不能更改容量 构造/编译后不能更改大小 存储是类固有的,不涉及分配器 对于单个类型没有奇怪的特殊大小写,如std::vector 引 ..
发布时间:2022-08-23 12:17:45 C/C++开发

传递类方法,而不是std::Sort中的函数

在类中,我试图通过传递同一类的方法来对向量进行排序。但它在编译时会给出错误。有谁能说出问题出在哪里吗?谢谢! 它会显示以下错误: bool (Sorter::)(D&, D&)' does not matchbool(Sorter::*)(D&;,D&;)‘ 类型的参数 我还尝试使用sortBynumber(D const& d1, D const& d2) #incl ..
发布时间:2022-08-23 12:08:01 C/C++开发

使用CMake链接到TBB文库

我已下载tbb并将其放置在我的存储库目录中: > tree deps/tbb/ -d deps/tbb/ ├── bin ├── cmake │ └── templates ├── include │ ├── serial │ │ └── tbb │ └── tbb │ ├── compat │ ├── internal │ └── ..
发布时间:2022-08-23 11:31:06 C/C++开发

什么是C++中的运算符AUTO?

Clang和Visual Studio编译器(但不是GCC)允许编写如下代码: struct A { operator auto() { return 0; } }; int main() { A a; a.operator auto(); } 什么是operator auto?它是特定编译器的扩展还是标准语言功能?如果是,它是以什么语言标准(例如C++17)出现的? ..
发布时间:2022-08-22 17:41:14 C/C++开发