jjzjj

c++ - MSVC : what compiler switches affect the size of structs?

我有两个单独编译的DLL,一个是从VisualStudio2008编译的,一个是从matlab编译的mex文件。两个DLL都包含一个头文件。当我在一个DLL中采用sizeof()结构时,它返回48,而在另一个DLL中它返回64。我检查了/Zp开关,在两个编译中它都设置为/Zp8。还有哪些其他编译器开关可能会影响结构的大小?该结构是一个简单的POCO,没有继承,也没有虚函数。编辑结构看起来像这样:classLIBSPECSGeometry{public:std::vectorm_i;uintN;uintn_im,n_s;};在调试中,sizeof()在两种情况下都返回56,在发行版中,在

c++ - 为什么 MSVC 10.0 编译器经常忽略 inline 关键字?

我有一些非常复杂的c++代码,用于实时系统,因此对速度绝对敏感。它是在Linux上开发的,为了加快它的速度,许多函数都标有“内联”关键字,并移至头文件中以允许内联。现在我将此代码移植到Windows(msvc10.0、Windows7),它的运行速度大约慢了30%。在做了一些分析之后,我发现问题基本上是很多函数没有内联。当我改用“__forceinline”时,我很容易看到速度提高了10-20%。有人对此有解释吗?仅仅是因为msvc中的算法更加保守吗?还是我只是做错了什么,比如缺少配置选项? 最佳答案 您需要检查您的MSVC优化设置

c++ - 如何将模板中具有非依赖名称的 msvc++ 代码移植到 Linux?

我可以处理移植平台相关的功能。我有一个问题,我在Linux上试过的编译器(clang和g++)不接受以下代码,而msvc++编译器接受:templateclassBase{protected:TValue;};templateclassDerived:publicBase{public:voidsetValue(constT&inValue){Value=inValue;}};intmain(intargc,charconst*argv[]){Derivedtmp;tmp.setValue(0);return0;}g++错误:main.cpp:Inmemberfunction‘void

c++ - 这是 MSVC++ 2017 更新 3 中的编译器错误吗

#includestd::vector::iteratorfoo();voidbar(void*){}intmain(){void*p;while(foo()!=foo()&&(p=0,true)){bar(p);}return0;}错误结果:c:\users\jessepepper\source\repos\testcode\consoleapplication1\consoleapplication1.cpp(15):errorC4703:potentiallyuninitializedlocalpointervariable'p'used 最佳答案

c++ - 链接器错误构建 GDAL

我正在使用MSVC201564位命令提示符从源代码构建GDAL。我正在使用Windows8。在构建的过程中,我收到以下错误:Creatinglibrarygdal_i.libandobjectgdal_i.expodbccp32.lib(dllload.obj):errorLNK2019:unresolvedexternalsymbol_vsnwprintf_sreferencedinfunctionStringCchPrintfWgdal201.dll:fatalerrorLNK1120:1unresolvedexternalsNMAKE:fatalerrorU1077:'"C:\P

c++ - msvc "the breakpoint will not currently be hit"

MSVS2013:我有一个静态库的VC项目和C++代码,我想从我的exe项目中进入,它们位于同一解决方案中。但是,调试器一直告诉我它不会遇到断点,因为它无法根据静态库的调试符号加载(“当前不会遇到断点。没有为该文档加载任何符号”)。同一解决方案中的其他静态库工作。我最近刚刚添加了新的,因为我想进入其中的一些代码以查看出了什么问题。我添加了一个从exe到lib项目的构建依赖项,不知道这是否有任何影响,但我认为它不会造成伤害。我也尝试过清理和重建。什么可能是提示,什么是我没有得到的:为什么VS在获得源代码时首先尝试加载调试符号?有趣的是,我有一个不同的解决方案,也使用完全相同的静态lib项

c++ 可以通过引用传递临时 lambda(适用于 msvc/windows 但不适用于 gcc/linux)吗?

假设我有以下代码片段://globalvariablestd::threadworker_thread;//Templatefunctiontemplatevoidstart_work(Functor&worker_fn)//lambdapassedbyref{worker_thread=std::thread([&](){worker_fn();});}这样调用:voiddo_work(intvalue){printf("Hellofromworker\r\n");}intmain(){//Thislambdaisatemporaryvariable...start_work([do

c++ - 使用 MSVC 2015 构建 boost 1.55 时指定工具集版本

我下载boost1.55,解压,然后运行以下命令:>bootstrap.batcl:CommandlinewarningD9035:option'GZ'hasbeendeprecatedandwillberemovedinafuturereleasecl:CommandlinewarningD9036:use'RTC1'insteadof'GZ'cl:CommandlinewarningD9002:ignoringunknownoption'/MLd'Bootstrappingisdone.Tobuild,run:...>b2--build-type=complete--build-d

c++ - 从子类 : gcc vs msvc 访问 protected 成员

在VisualC++中,我可以这样做:templateclassA{protected:Ti;};templateclassB:publicA{Tgeti(){returni;}};如果我尝试用g++编译它,我会得到一个错误。我必须这样做:templateclassB:publicA{Tgeti(){returnA::i;}};难道我不应该在标准C++中做前者吗?还是gcc配置错误导致出现错误? 最佳答案 这过去是允许的,但在gcc3.4中发生了变化.在模板定义中,非限定名称将不再查找依赖基的成员(如C++标准中的[temp.dep

c++ - GCC 和 MSVC 之间的 digits10 差异

我有以下代码:#include#includeintmain(){std::cout::digits10GCC4.4返回19MSVS9.0返回18有人可以解释一下为什么两者之间有区别吗?无论编译器如何,我都希望这样的常量是相同的。 最佳答案 如果VisualC++2008返回18对于std::numeric_limits::digits10,这是一个错误(我没有安装VisualC++2008来验证所描述的行为)。在VisualC++中(至少对于32位和64位Windows),unsignedlonglong是64位无符号整数类型,能