草庐IT

static-compilation

全部标签

c++ - CMAKE_CXX_COMPILER_VERSION 指向旧的 GCC 版本

我已经使用以下方法升级了我的GCC:$sudoadd-apt-repositoryppa:ubuntu-toolchain-r/test$sudoapt-getupdate$sudoapt-getinstallgcc-8g++-8$sudoupdate-alternatives--install/usr/bin/gccgcc/usr/bin/gcc-870--slave/usr/bin/g++g++/usr/bin/g++-8运行这些命令中的任何一个:$gcc--version$g++--version$c++--version$/usr/bin/gcc--version$/usr/b

c++ - 如何在c调用的matlab函数中使用 "global static"变量

您好,我目前正在使用MATLAB和C进行编码。我已使用MATLABCompiler将MATLAB函数编译到C共享库中。(mcc),并在C++程序中调用共享库中的函数。在C++中调用时,是否可以声明全局变量以在MATLAB函数之间共享数据?确切地说,如果matlab中有一个函数matlabA()和函数matlabB(),并使用mcc编译器编译成c++共享库为cppA()和cppB(),我可以通过在matlabA()和matlabB()?它似乎不起作用,那么我该如何在函数之间共享变量呢?谢谢!MATLABfunctionmatlabA()globalfoofoo=1;endfunction

c++ - "static_cast<To>(from)"当且仅当 "To to{from}"时,或者不是?

昨天在回答别人问题的过程中惊讶地发现gcc4.7.2包含特征模板std::is_explicitly_convertible,定义作为std::is_constructible_convertible的倒数:///is_explicitly_convertibletemplatestructis_explicitly_convertible:publicis_constructible{};搜索paper-trail,发现这个trait不应该有到过那里。bug有人提出反对将其包含在该版本的C++11标准库,它在gcc4.8.0中被删除。该错误报告指出std::is_explicitly

c++ - 在可能的情况下扩展为 static_assert 的断言宏?

我有一些通用代码需要对成员函数的结果运行断言。此成员函数可能是constexpr,也可能不是。templatevoidfoo(Tt){assert(t.member_function()==10);}因为t.member_function()可能是一个常量表达式,我想知道是否可以将其视为static_assert这种情况,但在其他情况下默认为正常的assert。这可能吗? 最佳答案 这是一个有点疯狂的解决方案。取消注释Constc;foo(c);行,你会发现它无法编译。这是编译时断言。需要variablelengtharrays,也

c++ - inline static auto 的 Initializer "sizeof(T)"...是否需要实例化?

如果表达式的类型不相关,但我们用它来初始化静态自动变量,会发生什么?GCC和Clang的行为不同templatestructA{staticinlineautox=sizeof(T{}.f);};Aa;GCC不会引发错误。但是Clang认为这是无效的,因为它实例化了“sizeof”的操作数。GCC似乎跳过了该步骤,因为sizeof(T{}.f)始终具有类型size_t(不依赖于类型),因此它已经知道x没有实例化。如果我们引用x,例如(void)a.x;,两个编译器都会拒绝该程序。它甚至必须解析x的类型吗?如果我没记错的话,C++14以上的语言允许使用“占位符类型”保留事物(如函数)并进

c++ - "static initialization order fiasco"是 constexpr 变量的关注点吗?

如果我在一个翻译单元中用非默认值初始化一个constexpr变量foo然后初始化另一个constexpr变量bar和foo在另一个翻译单元中bar是否有可能在foo之前初始化导致bar由零或默认初始化的foo初始化。即,与非constexpr情况(静态初始化顺序惨败生效)不同,编译器和链接器会分析依赖顺序以保证正确的结果吗?此外,constexpr变量模板如何受到影响?它们的初始化顺序在单个翻译单元内未定义。首选C++17标准答案。更新:这是一个最小的例子。有用;那就是问题所在。在这一点上,我99%确定这是安全的TheStaticInitializationOrderFiasco(TS

c++ - 构造函数执行顺序/顺序 : dependent initialization of static variable (class instance) in a function

对于以下代码段:classBar{public:intx;inty;Bar(int_x,int_y){/*somecodeshere*/...}};classFoo{public:intx;inty;intz;Foo(Barb):x(b.x),y(b.y){z=someFunction(x,y);}};voidf(intx,inty){Barb(x,y);staticFoox(b);}intmain(){f(2,3);}在我看来,函数内的静态变量甚至应该在main()之前初始化。但是,Foo类型的静态变量x依赖于Bar类型的局部变量b。问题是:1)x的构造函数什么时候执行?即x是在第一

c++ - Windows 10 上带有 mingw 的 CMake : Detecting CXX compiler ABI info - failed

我想使用cmake在Windows10上创建MinGWMakefile。我已经安装了mingw,并且可以毫无问题地使用mingw32-make和g++命令。测试项目是一个super简单的CMakeLists.txt文件:cmake_minimum_required(VERSION3.10)project(hello-world)add_executable(hello-worldmain.cpp)和一个简单的main.cpp文件:#includeintmain(){std::cout这些是我用来创建makefile的命令:>>mkdirbuild>>cdbuild>>cmake-G"M

c++ - 不可移动对象数组的初始化 : why does such code fail to compile on GCC?

这是代码示例,其中Test是一个不可复制的和不可移动的类,带有一些virtual成员和用户定义的构造函数,以及B是一个包含Test的原始(C风格)数组的类对象:classTest{public:Test()=delete;Test(constTest&)=delete;Test(Test&&)=delete;Test&operator=(constTest&)=delete;Test&operator=(Test&&)=delete;Test(inta,intb):a_(a),b_(b){}virtual~Test(){}inta_;intb_;};//----------------

c++ - 'static void' 作为 decl-specifier

以下代码可以用clang编译。我想知道C++标准是否适合这个。classA{staticvoidx;//#1staticconstvoidx;//#2staticvolatilevoidx;//#3};在我看来,所有的声明都是无效的。perenialC++standardvalidationsuite有这样一个这样的测试(#1)和clang(v3.4)失败了。不过,如果我从#1中删除静态,则clang会按预期报告错误。我查看了标准,发现了一段关于静态数据成员(9.4.2-2)的内容:2Thedeclarationofastaticdatamemberinitsclassdefinitio