草庐IT

c++ - 模板内的模板 VS 2005 问题?

下面的代码(用clang和gcc编译得很好)。问题是这段代码违反了C++03标准,或者这是VS2005错误?如果这是错误,是否有解决方法?更新:我通过使用前向声明找到了解决方法://forwarddeclarationtemplate::IsAccepted>structFilteredConstructor;//implementationtemplateclassFilteredConstructor{/*codehere*/};但是根据标准仍然存在关于此类代码有效或无效的问题namespace{structCoreTypesFilter{templatestructAccepto

c++ - 未处理的异常 C++ - VS2012

如果从我的代码中抛出std::exception,测试资源管理器将只显示“消息:未处理的C++异常”。不过,它确实显示了正确的堆栈跟踪。是否可以让测试资源管理器显示来自std::exception的what()方法的消息? 最佳答案 什么方法只会告诉你异常的名称。可能有一些类似于java的方法,如堆栈跟踪。 关于c++-未处理的异常C++-VS2012,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

c++ - 强制 visual studio 2012 编译器使用 C++ TR1(2007 标准)

是否可以强制visualstudio编译器根据2007C++标准(ISO/IECTR19768:2007,C++TR1)进行编译?我必须避免在当前项目中使用任何C++11功能,即使我们已经在使用2012工作室。 最佳答案 如果您有并行安装,例如VisualStudio2008,您可以在VS2012之外为您的C++项目使用它的编译器。这是通过“平台工具集”在项目设置中完成的。 关于c++-强制visualstudio2012编译器使用C++TR1(2007标准),我们在StackOverf

c++ - 无法在 VS 14 CTP : conditional expression of type 'void' is illegal 中使用 auto 声明 lambda

使用VisualStudio2014CTP、C++(v140)编译器:autogp=[&](BYTE*buff){autogp1=[](char*bff,char**p1){*p1=strstr((char*)bff,"(");return(*p1);};};错误:conditionalexpressionoftype'void'isillegal(也许auto真的输入错误?)如果我将内部lambda声明为std::functiongp1然后就可以了是我做错了什么还是编译器错误? 最佳答案 我没有运行2014,但您可能需要指定内部l

c++ - 如果存在则使用它/检测 C++ 中当前作用域的调用约定(thiscall vs cdecl)

我正在尝试编写一个健壮的宏,它将在thiscall和cdecl调用约定中工作,但如果“this”存在(thiscall),则利用“this”获取更多信息。这可能吗?这是一个不起作用的例子:#definePRINT_IF_THIS_EXISTS\if(this)printf("this(addr%08x)existsin%s!\n",size_t(this),__FUNCTION__)structMyStruct{voidMyFunc(){PRINT_IF_THIS_EXISTS;}};voidStaticFunc(){PRINT_IF_THIS_EXISTS;MyStructms;ms

c++ - 无法在 VS 2013 社区中创建 C++ 项目

在我选择“Win32控制台应用程序”或“Win32项目”并通过向导后,我得到了一个空的解决方案。“新建项目”对话框再次弹出:尝试CLR类下的项目类型时报错:它说了一些关于访问OLE系统注册表的事情。但WindowsStoreC++应用程序项目和其他语言工作得很好。我尝试过:使用安装程序提供的修复功能。运行vs_community.exe/uninstall/force并重新安装。删除C:\ProgramFiles(x86)\MicrosoftVisualStudio12.0\Common7\IDE中的ProjectTemplatesCache和ItemTemplatesCache目录,

c++ - 理解 double-to-int 转换中的 int-vs-trunc 关系

当我运行以下代码时#include#includeusingnamespacestd;intmain(){enum{FACTOR=3};doubled=1.0/FACTOR;doubled_i=int(d*FACTOR);inti_t=std::trunc(d*FACTOR);doubled_r=std::round(d*FACTOR);cout在Code::Blocks17.12IDE中(使用我认为/希望的全包工具),我得到了这些令人困惑的结果:0vs1vs1我尝试更改编译器,但没有任何改变。最后我安装了MinGW-64版本8.1.0。我的构建日志显示--------------Cl

c++ - Microsoft VS C++ 编译器是否存在 Bug Initialize a reference from a temporary object

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Bindingtemporarytoalvaluereference使用VS2008C++编译器编译代码无编译错误。classA{};intmain(){A&a_ref=A();return0;}我相信C++标准,包括C++2003和即将到来的C++0x,都不允许它。而且我还遇到了gcc编译器的编译时错误。所以我想知道的是,这是VS编译器允许从临时对象初始化引用的已知错误。还是VS编译器的功能扩展?如果是,临时对象的生命周期是多少?

C++,VS2010 : Avoid downloading MS redistrubutable package. 静态链接?

VS2010能否将所有内容链接到所需的exe文件中?还是把MSVS2010的文件放到安装包里?我不希望用户考虑下载和安装某些东西。 最佳答案 在一个大型的MFC项目中尝试过为此使用静态链接,使用VS2010,我发现我仍然需要运行VS2010SP1redist包。该软件在很大程度上没有它也能正常工作,但用户会看到相当多的额外随机错误,这些错误似乎在安装redist后奇迹般地消失了。我猜它会更新运行时所依赖的其他Windows组件,但这只是一个猜测。我的建议是将它包含在您的安装中。 关于C+

c++ - 这是一个 VS2012 优化错误吗?

在这里完成VS2010到2012的更新,有几个单元测试由于错误的代码生成或编程错误而失败,但我不确定是哪个。我发布的代码几乎与原始代码相同,并且也重现了问题。这是一个案例;所有类/实现都在单独的文件中。classBase{public:virtual~Base(){}voidDoIt(){DoItImpl();}protected:virtualvoidDoItImpl()=0;};classBase2:publicBase{public:virtualvoidDoStuff()=0;};classImpl:publicBase2{public:Impl();voidDoStuff()