jjzjj

c++ - MSVC++ 2015 - SSE 编译器错误或程序中的错误/未定义行为?

我在处理SIMD颜色插值函数时遇到了一些奇怪的行为,我将其缩减为一个最小程序。此示例中的SIMD代码不再执行lerp,而是执行从32位颜色到XMM寄存器的解包,然后再返回到32位。在MSVC++2015(更新3)中,在Releasex64模式下,以下代码不会产生正确的结果,但在Debugx64或Release/Debugx86中它可以正常工作。这是空的Win32C++控制台应用程序项目中的唯一代码:#include#include#include#include#include"emmintrin.h"structColor4{uint8_tred;uint8_tgreen;uint8

c++ - 在模板参数列表中使用 sizeof... 时为 "too few template arguments"(MSVC 2017)

以下最小示例不基于当前的MSVC2017(19.16)。它确实基于MSVC2015和2017(19.14)的旧版本、GCC、Clang和ICC。所以我怀疑这是一个编译器错误。有效吗?如果不是,为什么?#include#includetemplateautofoo(std::integer_sequence){returnstd::array{Is...};}std::arraybar(){returnfoo(std::make_integer_sequence());}有效的变体:投入unsigned(sizeof...(Is))在参数列表中作为默认参数替换unsigned(...)与

c++ - __LINE__ 在 MSVC 中不是 constexpr

2022年11月28日更新Microsoft(R)C/C++OptimizingCompilerVersion19.34.31933forx86这个问题似乎已经解决了。原帖好的,最新的VS2019社区,本地“所有默认”C++控制台项目:intmain(){//clVersion19.21.27702.2forx86//constexprautoMSCVER=_MSC_VER;//1921constexprautoMSCFULLVER=_MSC_FULL_VER;//192127702constexprautoMSCBUILD=_MSC_BUILD;//2/*:errorC2131:ex

c++ - 替换 msvc 上的 vsscanf

我在将代码库从linux(gcc)移植到windows(msvc)时遇到了问题。似乎C99函数vsscanf不可用并且没有明显的替代品。我读过有关使用内部函数_input_l并静态链接到crt运行时的解决方案,但不幸的是我无法静态链接,因为它会混淆应用程序加载的所有插件(作为dll)。那么是否有任何替代品或为vsscanf编写包装器的方法?2016-02-24更新:当第一次询问时没有本地替代品,但从那时起MSVC已经实现了对此的支持以及更多。VS2013并稍后实现vsscanf和friend。C++11也包括支持。 最佳答案 一个应

c++ - 是否可以将 gcc 编译库与 MSVC 一起使用?

我有一个项目依赖于libiconv进行多项操作。我在VisualStudio2008中使用iconv.lib的预编译二进制文件,但现在我不得不转向VisualStudio2010,并且没有更多的预编译二进制文件可用。我决定自己编译它,但正如libiconv文档所述,没有对MSVC编译器的官方支持。但是,我在某处读到gcc可以生成与MSVC编译器二进制兼容的静态库,只要二进制接口(interface)保留在C中即可。虽然这听起来很疯狂,但我试了一下,实际上几乎成功了。我编译了它,将libiconv.a重命名为iconv.lib并尝试与它链接。(如果这是个坏主意,请告诉我)。首先遇到链接错

c++ - msvc2010 - 如何建立一个干净的输出目录?

我在使用visualstudio2010时遇到问题,因为它现在在构建时使我的输出目录充满.pdb和其他文件。在以前版本的msvc中,我将中间目录设置为输出目录以外的其他目录,并在那里生成了.pdb文件(以及其他所有内容):$(IntDir)/$(ProjectName).pdb说。现在,在新版本的msvc中,它似乎仍然在那里构建.pdb,但出于某种我不知道的原因,还在我的输出目录中放置了一个.pdb文件(我不想要)。如果我设置增量链接,.ilk文件似乎也会发生同样的事情,但这不太重要,因为我可以禁用增量链接,但.pdb对于调试程序是必不可少的。我认为这是msvc中的一个错误,但我只在c

c++ - 如何为 C++ (MSVC 2008) 解决方案创建语言附属 DLL?

我们最终要本地化我们的应用程序,需要为字符串表创建附属DLL(从源代码中取出硬编码字符串需要一个月的时间)。我一直在查看MSDN和其他帮助,但我对实际构建语言DLL的机制感到很困惑。我们在EXE本身中有英文资源。根据我的理解,我们现在需要创建名为MyAPPXXX.dll的DLL项目。我不确定我们应该怎么做。是否只有一个资源/rc文件和文件中的不同部分,或者是否为每种语言复制了rc文件并替换了翻译?我在尝试按照我在其他地方看到的有关如何执行此操作的说明时迷路了。是否每种语言都需要一个DLL,或者我们是否有具有多种配置的同一个项目-如果是后者,如何完成?这是我读过的有关此内容的页面列表-但

c++ - 使用 MSVC 编译的多线程应用程序在运行时失败

我已经实现了一个循环运行提供的函数的类。//Timer.h#include#include#includeclassTimer{public:Timer(conststd::chrono::millisecondsperiod,conststd::function&handler);~Timer();voidStart();voidStop();boolIsRunning()const;private:conststd::function&handler;conststd::chrono::millisecondsperiod;boolisRunning=false;mutablest

c++ - 这是 MSVC 中依赖名称解析的错误吗?

关于cppreference.com,以下代码作为解释相关名称解析的示例提供:#includevoidg(double){std::coutstructS{voidf()const{g(1);//"g"isanon-dependentname,boundnow}};voidg(int){std::couts;s.f();//callsg(double)}当前版本的VisualC++(19.0.23918.0)产生以下输出:g(int)g(int)这是标准允许的,还是MSVC中的错误? 最佳答案 “从属名称解析”在这里具有误导性。g是

c++ - 处理 MSVC 宏中的额外括号

在某些情况下,您需要(a)有一个宏,(b)在(c)语言不允许括号的情况下将其参数之一括起来。简单的例子:#defineMAKE_STRUCT(name,base)structname:base{}structX{};MAKE_STRUCT(Y,X);//okMAKE_STRUCT(Z,(X));//error这是一个错误,因为我们需要一个类型名称并且我们得到了(。ecatmur通过利用有other允许使用额外括号的部分语言:templatestructargument_type;templatestructargument_type{typedefUtype;};#defineMAKE