草庐IT

conditional-compilation

全部标签

c++ - 正确实现 condition_variable timed_wait

我正在阅读我的STL实现(标准问题g++4.6.2)并在condition_variable中遇到了这种竞争条件:templatecv_statuswait_for(unique_lock&__lock,constchrono::duration&__rtime){returnwait_until(__lock,__clock_t::now()+__rtime);}因为__clock_t是一个std::chrono::system_clock,我们被NTP之类的奇思妙想所束缚(如果时钟在__clock_t::now()+__rtime,那我们就等一天)。C++标准(30.5.1)似乎是

c++ - 编译器 : What if condition is always true/false

我考虑条件和编译器。我正在为Arduino编写一个应用程序,因此我需要该应用程序尽可能快。在我的代码中我有这个:#defineDEBUGfalse...if(DEBUG){StringpinName;pinName="Pin";pinName+=pin;pinName+="initialized";Serial.println(pinName);}我想知道编译器是否不包含二进制文件中的代码(ifblock中的代码)。条件总是假的,所以程序永远不会去那里。从另一边。如果DEBUG为真怎么办?Arduino是测试条件还是编译器只在二进制文件中包含if的主体?我找到了这个网站https://

c++ - 使用 std::mutex、std::condition_variable 和 std::unique_lock

我在理解条件变量及其在互斥锁中的使用方面遇到了一些问题,希望社区可以帮助我。请注意,我来自win32背景,所以我与CRITICAL_SECTION、HANDLE、SetEvent、WaitForMultipleObject等一起使用。这是我第一次尝试使用c++11标准库进行并发,它是programexamplefoundhere的修改版本.#include#include#include#include#include#include#includeint_tmain(intargc,_TCHAR*argv[]){std::queuenNumbers;std::mutexmtxQueu

c++ - 线程池实现 : condition_variables vs. yield()

我尝试用C++开发一个线程池,我想知道是在工作线程的主循环中让线程产生更好还是等待条件变量更好:voidworker_thread(void){//thisismoreorlesspseudocodewhile(!done){if(task_available)run_task();elsestd::this_thread::yield();}}对voidworker_thread(void){//thisismoreorlesspseudocodestd::unique_locklk(mutex_);while(!done){if(task_available)run_task();

c++ - '/usr/lib/i386-linux-gnu/qt5/bin/lrelease : not found WARNING: TARGET is empty' Error when trying to compile Feathercoin from source

我关注this从源代码安装羽毛币的提示。我已按照所有说明进行操作,直至:qmake'USE_UPNP=-`make这就是我得到以下错误的地方:1:/usr/lib/i386-linux-gnu/qt5/bin/lrelease:notfoundWARNING:TARGETisempty`下面是终端输出:RCC:Errorin'src/qt/bitcoin.qrc':Cannotfindfile'locale/bitcoin_bg.qm'RCC:Errorin'src/qt/bitcoin.qrc':Cannotfindfile'locale/bitcoin_ca_ES.qm'RCC:E

c++ - 可变参数模板和函数的指针 : what compiler is right?

我找不到更好的标题,但如果您有正确的想法,请随时修改它。事实上,它还是比GCCvsclang好。我试图找出这段代码有什么问题:templatestructS;templatestructS:S{usingS::f;templatevoidf(){}};templatestructS{voidf();};templatestructR:S{usingS::f;templatevoidg(){this->templatef();}};voidh(constdouble&){}intmain(){Rr;r.g();}它可以用GCC4.9编译(参见here),但它不能用clang3.8.0编译

c++ - 对于 C++17 中的非标准布局类, `offsetof` 为 "conditionally-supported"是什么意思?

C++17标准在[support.types.layout]中说:Useoftheoffsetofmacrowithatypeotherthanastandard-layoutclassisconditionally-supported.在[defns.cond.supp]:conditionally-supportedprogramconstructthatanimplementationisnotrequiredtosupport我发现offsetof的这个定义不是很精确。这是否意味着我可以安全地尝试将它与非标准布局类一起使用?“有条件支持”与定义的实现有何不同?编译器是否不支持生

c++ - target_compile_options() 仅适用于 C++ 文件?

是否可以仅将target_compile_options()用于C++文件?我想将它用于作为其他应用程序依赖项的目标,以便库可以将其编译器标志传播到这些应用程序。但是,如果与C或ObjC文件一起使用,某些标志(例如-std=c++14)会导致构建失败。我读过我应该CXX_FLAGS而不是只将这些标志添加到C++文件中,但这不会(自动)通过cmake的包系统传播。 最佳答案 解决方案您可以使用generatorexpressions来执行此操作:target_compile_options(MyLibPUBLIC$:-std=c++1

c++ - std::conditional vs std::enable_if

我有一个散列函数,它可以接受任何对象类型并对其进行散列,它使用std::hash内部。因为std::hash不支持枚举类型我创建了函数的重载,1用于枚举使用std::underlying_type其他类型为1:template::value>::type*=nullptr>staticstd::size_tHash(Tconst&t){returnstd::hash::type>()(t);}template::value>::type*=nullptr>staticstd::size_tHash(Tconst&t){returnstd::hash()(t);}这工作正常。然后我尝试使

c++ - 使用 Visual Studio Compiler 分析内联 C++ 函数

当编译器内联了很多代码时,如何理解Windows上的C++分析数据?IE。我当然想测量实际运行的代码,所以根据定义,我将测量代码的优化构建。但似乎我尝试的所有工具都没有真正设法解决内联函数。我已经尝试了VisualStudio2017Professional和VTune2018中的采样分析器。我尝试启用/Zo,但似乎没有任何影响。我发现以下资源似乎表明只有VisualStudioUltimate或Premium支持内联框架信息-VisualStudio2017是否仍然如此?https://social.msdn.microsoft.com/Forums/en-US/9df15363-5