草庐IT

atomic_long_try_cmpxchg_acquire

全部标签

c++ - Try-catch 在共享库中不起作用?

(这类似于myotherquestion但这是另一回事,即使它是相关的)我的项目中遇到了一个大问题。我有一个处理XML并可以抛出异常的库。并且,使用它来创建配置文件类显示了我的第一个错误:库中根本没有处理异常,每个异常都没有处理。在我写的库中:try{throwstd::exception();}catch(...){printf("caught\n");}但是,异常没有被处理并立即调用std::terminate:terminatecalledafterthrowinganinstanceof'std::exception'what():std::exception编译标志是最简单的

c++ - std::atomic::load 的内存排序行为

我是否错误地假设atomic::load也应该充当内存屏障以确保所有先前的非原子写入将对其他线程可见?举例说明:volatileboolarm1=false;std::atomic_boolarm2=false;booltriggered=false;线程1:arm1=true;//std::std::atomic_thread_fence(std::memory_order_seq_cst);//thiswoulddothetrickif(arm2.load())triggered=true;线程2:arm2.store(true);if(arm1)triggered=true;我预

c++ - 在现代 C++ 中使用 try..catch block 通过模板元编程包装任意函数调用

我想创建一些模板,基本上应该包装它的参数。参数应该是一个任意的函数调用,它通过一些带有前缀和后缀代码的模板元编程魔法被包装。我想像下面这样使用它:autoresult=try_call(some_vector.at(13));和try_call将以某种方式定义,它将try..catchblock包装在some_vector.at(13)周围。像这样:template//sometemplatemetaprogrammingmagicheretry{autovalue=//executetheparameterhere,i.e.some_vector.at(13);returnstd::

c++ - unsigned long 的类型不同于 Windows 上的 uint32_t 和 uint64_t (VS2010)

在Windows7、32位的VisualStudio2010上,unsignedlong似乎是与uint32_t和uint64_t截然不同的类型。看下面的测试程序:#include#includetemplatestructis_same_type{staticconstboolvalue=false;};templatestructis_same_type{staticconstboolvalue=true;};#defineTO_STRING(arg)TO_STRING_IMPL(arg)#defineTO_STRING_IMPL(arg)#arg#definePRINT_SAME

C++ chrono - 将持续时间作为 float 或 long long

我有一个持续时间typedefstd::chrono::high_resolution_clockClock;Clock::time_pointbeginTime;Clock::time_pointendTime;autoduration=std::chrono::duration_cast(endTime-beginTime);我在std::chrono::milliseconds中得到了duration。但我需要duration作为float或longlong。如何做到这一点? 最佳答案 来自documentationtempl

c++ - 如何正确地将 time_t 转换为 long int?

我仍在学习C++中的类型转换,目前我正在做这件事longintt=time(NULL);我正在使用VS2013并注意到从“time_t”到“long”警告的转换,所以我想我应该将其强制转换为看起来像;longintt=static_casttime(NULL);然而,这还行不通,但结合静态转换和C风格转换仍然有效longintt=static_cast(time(NULL));我只是想知道是否有人可以帮助阐明这一点? 最佳答案 time(NULL)不是强制转换而是返回time_t的函数调用.自time_t与longint不完全相同的

c++ - unsigned int 到 unsigned long long 定义明确吗?

我想看看当unsignedlonglong被赋值给unsignedint时幕后发生了什么。我制作了一个简单的C++程序来试用它,并将所有io移出main():#include#includevoidusage(){std::cout\n";exit(0);}voidatoiWarning(intfoo){std::cout生成的程序集为main生成了这个:0000000000400950:400950:55push%rbp400951:4889e5mov%rsp,%rbp400954:4883ec20sub$0x20,%rsp400958:897decmov%edi,-0x14(%rb

c++ - long long 有定义吗?

在哪里检查是否定义了longlong类型?我想做这样的事情:#ifdefLONGLONG#definelong_longlonglong#else#definelong_longlong#endif 最佳答案 LLONG_MAX给出longlong可表示的最大值;如果您的实现不支持longlong,它不应该定义LLONG_MAX.#include#ifdefLLONG_MAX#definelong_longlonglong#else#definelong_longlong#endif这不是一个完美的解决方案。longlong在C++

解决Idea启动项目失败,提示Error running ‘XXXApplication‘: Command line is too long

IDEA版本为:IntelliJIDEA2018.2(UltimateEdition)一、问题描述有时当我们使用IDEA,Run/Debug一个SpringBoot项目时,可能会启动失败,并提示以下错误。Errorrunning'XXXApplication':Commandlineistoolong.ShortencommandlineforXXXApplicationoralsoforSpringBootdefaultconfiguration.意思是错误运行某程序:命令行太长。为某程序或为SpringBoot默认配置缩短命令行。如下图:出现这种报错的原因是类路径太长或者VM参数太多以致超

c++ - 使用 atomic_flag 自旋锁进行内存排序

我正在尝试熟悉c++11的新内存排序概念,并且相信我实际上已经很好地掌握了它们,直到我偶然发现了自旋锁的这个实现:#includenamespaceJayZ{namespaceTools{classSpinLock{private:std::atomic_flagspin_lock;public:inlineSpinLock(void):atomic_flag(ATOMIC_FLAG_INIT){}inlinevoidlock(void){while(spin_lock.test_and_set(std::memory_order_acquire));}inlinevoidunlock