jjzjj

c++ - 这个不可复制的 map 是否合法 c++11? GCC 4.7 和 MSVS 2010 允许它。 Clang 3.1 没有

我创建了一个不可复制的map,我无法使用clang对其进行编译。由于clang非常符合标准,我想知道我的代码是否合法。MSVS2010和GCC4.7编译此代码时没有警告或错误。附上完整代码:有问题的行是main的最后一行。=delete需要删除MSVS2010#include#include#includetemplate>classnon_copyable_map:publicstd::map{typedefstd::mapBaseType;public:non_copyable_map(){}non_copyable_map(non_copyable_map&&t):BaseTyp

c++ - 与使用声明在 GCC 中编译但在 MSVS 中编译的范围相同的类声明

根据c++标准,下列程序是否良构?namespaceX{classA;}namespaceY{usingX::A;classA{};}intmain(){}我用不同的编译器得到不同的结果:gcc编译它没有错误。visualc++给出错误C2888:“X::A”:无法在namespace“Y”中定义符号我没有发现我的程序违反了c++标准中的任何规则。如果程序是良构的,为什么visualstudio会报错?如果程序不是良构的,它违反了c++标准中的什么规则,为什么gcc不报错?我并不是要编译我的程序。我只是想看看它是否符合c++标准,以及为什么我测试的两个编译器的行为不同。

c++ - C->C++ 在未给出类型的情况下,在#define 中自动将 void 指针转换为 C++ 中的类型指针(C 风格)[MSVS]

您好!我使用了下面的C宏,但是在C++中它不能自动将void*转换为type*。#defineMALLOC_SAFE(var,size){\var=malloc(size);\if(!var)gotoerror;\}我知道,我可以做这样的事情:#defineMALLOC_SAFE_CPP(var,type,size){\var=(type)malloc(size);\if(!var)gotoerror;\}但我不想重写大部分代码,其中使用了MALLOC_SAFE。有没有办法在不给宏类型的情况下做到这一点?也许一些MSVC2005#pragma/__declspec/other?p.s.

c++ - 了解 MSVS C++ 编译器优化

我不明白这段代码中发生了什么。C代码是:#includeintmain(){constintmul=100;intx;printf_s("Inputanumber\r\n");scanf_s("%i",&x);printf_s("%i/%i=%i\r\n",x,mul,x/mul);return0;}我预计生成的程序集将是一些简单的移位和加/减操作,但有一些神奇的常量,如51EB851Fh、乘法等。这里发生了什么?;int__cdeclmain()_mainprocnearx=dwordptr-8var_4=dwordptr-4pushebpmovebp,espsubesp,8move

c++ - MSVS 2010 和 C++ 标准的构建问题

我正在尝试使用msvs2010构建在以下git中找到的项目:https://github.com/Joonhwan/exprtk问题是当我注释掉exprtk.hpp文件中的第48行“#defineexprtk_lean_and_mean”时,出现以下编译器错误:Error1errorC1128:numberofsectionsexceededobjectfileformatlimit:compilewith/bigobj谷歌搜索错误,似乎表明已编译的翻译单元已编译到大于任意限制的内容,并且将“bigobj”添加到命令行应该可以解决问题(确实如此)。使用gcc(4.3)编译代码,可以正常

c++ - 为什么在使用其他库时会出现 LNK4098 冲突 - 尝试在 MSVS2010 Express 中编译 C++ 时?

我的程序无法在/MT(多线程)模式下成功编译。它在/MD(多线程DLL)中编译。我希望能够在我将与安装程序一起分发的应用程序中同时使用libcurl和boost。编译于:MSVS2010这是复制我的问题的代码:#include"stdafx.h"#include"boost/regex.hpp"#include"curl/curl.h"int_tmain(intargc,_TCHAR*argv[]){CURL*curl;curl=curl_easy_init();return0;}这是我在/MD模式下收到的警告:LINK:warningLNK4098:defaultlib'MSVCRT

c++ - msvs12 将大括号视为 operator()

#includestructA{voidoperator()(constchar*){std::coutmsvs12对这段代码很满意,但我不明白为什么。是bug还是别的什么?更新:我尝试使用msvs2013(v12.0.31101.0更新4) 最佳答案 是的,这是一个错误。Hereistheticketforit仍然打开。 关于c++-msvs12将大括号视为operator(),我们在StackOverflow上找到一个类似的问题: https://stac

c++ - 带有 using-declarations 链接的程序在 MSVS 和 clang 上编译,但在 GCC 上不编译

根据c++标准,以下程序是良构的还是良构的?namespaceX{inti;}namespaceY{usingX::i;}intmain(){usingX::i;usingY::i;}我使用不同的编译器得到不同的结果:MSVS:编译(http://webcompiler.cloudapp.net/)Clang:编译(http://melpon.org/wandbox/permlink/KloDufJ5h1DalK4v)GCC:编译错误(http://melpon.org/wandbox/permlink/IKuuQGE1THofuUTr)我不想修复这个程序以使其在GCC上编译。我只想知

c++ - g++ 和 MSVS 之间的名称查找差异

考虑这段代码:#includenamespaceN{classA{};voidf(Aa){std::coutclassBase{public:voidf(Tx){std::coutclassX:publicBase{public:voidg(){Tt;f(t);}};intmain(){Xx1;x1.g();Xx2;x2.g();}该代码旨在研究名称查找在C++中的工作原理。如果我用GNUC++(6.1.0版)编译这个程序,它会打印:N::f::f但如果我用MicrosoftVisualStudio2015编译它,它会打印:Base::fBase::f哪个是正确的行为,为什么?

c++ - CMake 和 MsVS-NuGet

我目前正在开发一个桌面应用程序,使用C++RESTSDK(代号Casablanca)、Qt5和其他一些库。对于项目设置,我使用CMake。如何让CMake安装NuGet包?如果我重新运行CMake,我现在每次都必须手动安装它,这不是一个真正的选择。 最佳答案 编辑:此答案不适用于C++项目。编辑:从CMake3.15开始,CMake支持使用VS_PACKAGE_REFERENCES引用Nuget包。现在,这是一个更比下面之前提出的解决方法更清洁的解决方案。要将Nuget包引用添加到CMake目标,请使用由_下划线分隔的包名称和包版本