c++03相关内容
我想知道如何定义一个宏,该宏将以给定的类名以"Namespace.SubNamespace.ClassName"这样的格式输出其名称空间和类名? 所以写这样的东西: // MyClass.h #include namespace NS { namespace SNS { class MyClass { static std::string str;
..
也许我已经考虑过了,但是请考虑以下示例: bool some_state = false; // ... later ... some_state = true; do_something(); some_state = false; 现在想象一下do_something()会抛出.我们不会将some_state设置回false.最好是具有某种自动堆栈,该堆栈会根据范围推入/弹出来记
..
尽管Microsoft标准运行时提供了分配功能的调试版本,但它实际上不起作用,因为您不应该在C ++代码中使用裸露的新内容,因此检测指向标准库,否则就指向标准库,因为标准库不能反正装备了. 现在,我拥有可以产生(并记录)分配回溯的代码,并且我还使用了 DUMA .但是,当我们使用流时,替换分配函数的尝试失败了,因为streambuf调用某些调试变量,并且new和delete之间的用法不一致.
..
我在多个地方使用随机数,通常在需要时构造一个随机数生成器.目前,我使用Marsaglia Xorshift算法将其与当前系统时间一起作为种子. 现在,我对此策略有一些疑问: 如果我使用多个生成器,则生成器之间数字的独立性(随机性)取决于种子(相同种子的相同数字).由于我将时间(ns)用作种子,并且由于该时间发生了变化,因此我想知道是否仅使用一个奇异发生器和例如使它作为单例可用.这会增加随机数的质量
..
我有int* foo[SIZE],我想在其中搜索第一个指向NULL的元素. 但是当我这样做时: std::find(foo, foo + SIZE, NULL) 我得到了错误: 错误C2446:'==':没有从'const int'到'int *' 的转换 我应该只使用static_cast(NULL)而不是NULL吗? C ++ 11通过 nullp
..
可能重复: “反向移植"将nullptr转换为C ++-pre-C ++ 0x程序 如何定义nullptr以同时支持C ++ 03和C ++ 11? 下面的代码可以在不更改C ++ 11编译器中nullptr的含义的情况下使用C ++ 03和C ++ 11编译器编译吗? #include #if !defined(nullptr) #define null
..
我需要创建一个原始缓冲区数据类,它必须返回一个指向 char 的指针,该指针必须保证字对齐。 我正在考虑使用 std :: vector>。 vec 。 我知道 std :: vector 将使用 operator new 分配内存,该内存可以保证返回最大对齐的内存,但我不想依赖于此。 我也不想创建自己的对齐分配器。 这就是我想出的:(假装 ui
..
假设我想获取std :: sort,以根据指针所指向的int的值对指向int的指针的向量进行排序.忽略那里明显的性能问题.简单吧? 发挥作用: bool sort_helper(const int *a, const int *b) { return *a
..
这似乎是一个相当简单的想法:我有一组类,我应该能够为这些类写一个运算符,比如用基本相同的代码进行减法. 当尝试以“显而易见的"方式执行此操作时,即: template T operator-(T a, const T& b) { return a -= b; } 然后,在某些编译器上,这似乎与迭代器的减法运算符发生冲突(特别是在gcc 3.4.6和
..
在一些使用std::ofstream执行大量文件I/O的代码中,我在缓存流以提高效率.但是,有时我需要更改文件的打开模式(例如,append vs truncate).这是一些类似的模拟代码: class Logger { public: void write(const std::string& str, std::ios_base::openmode mode) {
..
为了更新读取缓存,我需要一个非常快速的线程通知机制(在某种意义上是“阅读器的低成本",而不是“低延迟"): 情况 线程W(编写器)仅偶尔更新一次数据结构(S)(在我的情况下为地图中的设置). 线程R(读取器)维护S的缓存,并且确实非常频繁地读取它.当线程W更新S时,需要在合理的时间(10-100毫秒)内将更新通知给线程R. 体系结构是ARM,x86和x86_64.我需要在g
..
我在这里阅读了很多关于以下问题的文章:C ++的标准容器(例如"list"或"map")是否是线程安全的,并且所有人都说这不是一般情况.并行读取应该可以,但是并行写入或并行读取和写入可能会导致问题. 现在,我发现在 www.cplusplus.com 上,大多数情况下都可以访问或修改列表操作很安全. 一些例子: map ::查找 访问容器(const版本和非const版本都
..
这个问题是针对C ++ 03的,而不是针对C ++ 11的. 在某些情况下,我正在使用具有多重继承的CRTP,并且我很想知道是否有一种方法可以删除在指定以下B类型时创建的冗余. #include "boost/typeof/typeof.hpp" #include "boost/units/detail/utility.hpp" #include #include
..
我的最新帖子杂乱无章的信息很多.部分原因是这个问题,希望它本身提供更多信息会更有意义. 我正在尝试使用MATLAB R2016b中的mex在Windows上编译C ++ 03代码. 当我尝试这样做时,出现以下错误: Error using mex cpp_mexapi_version.o: In function `mexfilerequiredapiversion': C:/P
..
当我尝试在-std=c++11的Apple平台上使用unique_ptr时,捕获了编译错误: $ make c++ -std=c++11 -DNDEBUG -g2 -O3 -fPIC -march=native -Wall -Wextra -pipe -c 3way.cpp In file included ... ./smartptr.h:23:27: error: no type nam
..
干杯和健康. -Alf在答案中发表了评论,与C ++相比,值初始化可以说是C ++ 03的新功能. 98.我想知道他是什么意思. C ++ 98的值初始化的一部分吗?它在概念上存在但在名称上不存在吗?为什么将它添加到C ++ 03标准? 我有'03标准的副本,但没有'98标准的副本.这是默认初始化和值初始化的定义. 默认初始化T类型的对象的意思是: -如果T是非POD类类型
..
在另一个答案中指出,在C ++ 11之前,其中i是int ,然后使用表达式: *&++i 引起不确定的行为.这是真的吗? 在另一个答案上,在评论中进行了一些讨论,但似乎没有说服力. 解决方案 询问*&++i本身是否具有UB毫无意义.延迟不一定访问i的存储值(优先级或新值),如将其用作引用的初始化表达式所见.只有涉及右值转换(在这种情况下使用)时,才有任何问题需要讨论.然后,
..
可能重复: C ++运算符的百分比保证 在c ++ 98/03中 5.6-4 二进制/运算符产生商,二进制%运算符 产生第一个表达式除以的余数 第二.如果/或%的第二个操作数为零,则行为为 不明确的;否则(a/b)* b + a%b等于a. 如果两个操作数 为非负数,则其余为非负数;如果不是,则为 其余的是实现定义的. 在c ++ 11中: 5.6 -4 二进
..
在C ++ 03中,Boost的Foreach使用这项有趣的技术可以在运行时检测 表达式是左值还是右值. (我通过这个StackOverflow问题发现: C ++ 03中的Rvalues ) 这是在运行时进行演示的示例 (这是我在思考此问题时出现的一个更基本的问题, 现在,我已经阐明了这个问题,在编译时使用C ++ 03测试了右值性,我将谈论到目前为止我一直在尝试的事情. 我希
..
Accordint 这个非常高度响应的答案 ,迭代一组擦除一些元素的规范方法如下: for(it = mySet.begin(); it!= mySet.end();){ if(conditionToDelete(* it)){ mySet.erase(it ++); } else { ++ it; } } 这当然是C +的结果+ 03的设置擦除不返回迭代
..