草庐IT

static-compilation

全部标签

c++ - 充分利用 static_assert 和 std::is_invocable

我有一个包含多个函数对象的库,这些函数对象可能只接受几种类型,具体取决于std::is_integral.我要std::is_invocable在条件失败时返回false,但当用户尝试调用函数对象的实例时,我还想要一个不错的static_assert错误消息。这是我目前拥有的函数对象的一个​​简化示例:structfunction{templateautooperator()(Iteratorfirst,Iteratorlast)const->std::enable_if_t::value_type>>{/*something*/}};通过这样的实现,std::is_invocable

c++ - 自动模板参数 : g++ 7. 3 vs clang++ 6.0 : Which compiler is correct?

对于这个代码示例,两个编译器会产生不同的结果。Clang生成两种不同的类型。G++对fu和fi使用相同的类型。哪个符合标准?#includetemplatestructfoo{decltype(IVAL)x=-IVAL;};intmain(){foofu;foofi;std::coutg++-7.3输出:42949672864294967286clang-6.0输出:-104294967286 最佳答案 gcc在这里是错误的,这显然是两种不同的类型。并确认-此错误已在gcc8.0.1中修复Samplecode

c++ - 具有-static 和-rdynamic 的backtrace_symbols()

查看thisquestion和thisquestion我可以看到要使backtrace_symbols()正常工作,必须使用-rdynamic标志进行编译。我已经在测试程序中尝试过它并且它可以工作,但我正在编写一个程序,该程序也是使用-static和thispage编译的表示当-static传递给编译器/链接器时backtrace_symbols()不起作用。是否有任何快速解决方法,或者我的静态链接程序中永远不会有人类可读的回溯函数? 最佳答案 答案已经在手边:在thesamepageIlinkedinthequestion中.最后

C++11 move(x) 实际上意味着 static_cast<X&&>(x)?

这个问题在这里已经有了答案:Whenisthemoveconstructorcalledinthe`std::move()`function?(2个答案)关闭9年前。刚刚阅读了Stroustrup的C++编程语言第4版,在第7章中他说:move(x)meansstatic_cast(x)whereXisthetypeofx和Sincemove(x)doesnotmovex(itsimplyproducesanrvaluereferencetox)itwouldhavebeenbetterifmove()hadbeencalledrval()我的问题是,如果move()只是将变量转换为r

c++ - 在 Windows 上将 Boost 库与 Boost_USE_STATIC_LIB OFF 链接

我的CMakeFiles.txt看起来像这样:cmake_minimum_required(VERSION2.6)#SetwarningsonandenabledebuggingSET(CMAKE_C_FLAGS"-Wall-q")include(FindBoost)set(Boost_USE_STATIC_LIBSON)set(Boost_USE_MULTITHREADEDON)set(Boost_USE_STATIC_RUNTIMEOFF)find_package(Boost1.57.0COMPONENTSsystemfilesystemREQUIRED)if(Boost_FOUN

c++ - 奇怪的 static_cast 把戏?

在仔细阅读Qt源代码时,我遇到了这个gem:templateinlineTqgraphicsitem_cast(constQGraphicsItem*item){returnint(static_cast(0)->Type)==int(QGraphicsItem::Type)||(item&&int(static_cast(0)->Type)==item->type())?static_cast(item):0;}注意static_cast(0)->Type?我已经使用C++很多年了,但以前从未见过0在static_cast中使用过。这段代码在做什么,它安全吗?背景:如果您从QGrap

c++ - 有符号右移 : which compiler use logical shift

我用VisualStudio、Ubuntu的GCC、Intel编译器、MinGW测试了右移。全部移入符号位。我想Xcode的GCC也是如此。我知道该行为是特定于实现的,但看起来所有主要的桌面/服务器编译器都实现了算术移位。有没有符号位不移位的广泛使用的编译器?谢谢。 最佳答案 C在很多不同的架构上运行。我的意思是很多不同的架构。您可以获得在嵌入式DSP和Craysuper计算机上运行的C代码。人们认为理所当然的C标准中的大多数“实现定义”部分实际上只会破坏晦涩的体系结构。例如,有一些DSP和Craysuper计算机,其中CHAR_B

c++ - 私有(private)成员 : Static const vs. 只是 const

当一个对象具有一些不会改变并且在其整个功能中都需要的特征时,我正在尝试确定最佳选择。静态常量成员Const成员在我看来,静态成员的真正原因是拥有一个可以更改的变量,从而影响同一类的所有其他对象。但是,有人建议将类“不变量”作为静态常量成员。我正在寻找有关建立类常量的推荐方法及其原因的一些见解。 最佳答案 “不会改变”不够准确。这里的主要问题是类的不同对象是否需要具有这些const成员的不同值(即使它们在对象的生命周期内没有改变)或者所有对象都应该使用(共享)相同的值。如果类的所有对象的值都相同,那么当然应该是类的staticcons

c++ - g++ 上 constexpr 上下文中成员指针的 static_cast

我在使用static_cast在constexpr上下文中向上转换成员指针时遇到了g++问题。请参见代码示例。在使用g++6.3和7.0版进行编译时,会出现编译错误,指出reinterpret_cast不是常量表达式。虽然clang4.0版没有给出错误,但我认为这是正确的,因为这里没有reinterpret_cast。这是g++或clang中的错误吗?什么是正确的行为?structBase{};structDerived:Base{inti;};structPtr{constexprPtr(intDerived::*p):p(static_cast(p)){}intBase::*p;}

c++ - AVR 工作室 5 : compile C++ code

在AVRStudio5中创建项目时,它会创建一个包含以下内容的.c文件:#includeintmain(void){while(1){//TODO::Pleasewriteyourapplicationcode}}构建这个C程序工作得很好:------RebuildAllstarted:Project:AVRGCC2,Configuration:DebugAVR------Buildstarted.Project"AVRGCC2.avrgccproj"(ReBuildtarget(s)):Target"PreBuildEvent"skipped,duetofalsecondition;