jjzjj

c++ - MSVC9.0 bug 或对虚拟继承的误解和 friend ?

考虑以下代码:classA{friendclassB;friendclassC;};classB:virtualprivateA{};classC:privateB{};intmain(){Cx;//OKdefaultconstructorgeneratedbycompilerCy=x;//compilererror:copy-constructorunavailableinCy=x;//compilererror:assignmentoperatorunavailableinC}MSVC9.0(VisualStudio2008的C++编译器)确实会生成默认构造函数,但无法为C生成复制

c++ - MSVC++ 限制关键字和局部变量

我已经阅读了很多关于restrict关键字的文章。但实际上,我能找到的每个示例似乎都只将输入参数引用到一个函数,也许还有一个值。我需要澄清我的理解。我发现一个函数看起来完全违反了带有输入参数和局部变量的关键字规则。此函数使用指向缓冲区的void*调用,指针声明为__restrict(这是MicrosoftVisualC++)。然而在函数的后面,声明了一个类型为UCHAR*的局部变量指针,并使其指向相同的受限输入参数缓冲区。这里是我正在谈论的函数的一个严重缩减版本:voidFoo(intnVersion,intnX,intnY,intnWidth,void*__restrictpBuff

c++ - MSVC QT Creator - 如何正确设置 CDB?

所以我重新安装了我的系统,但我在MSVC调试方面遇到了很大的问题。我可以毫无问题地编译我的应用程序。我已按照QTcreatorsettingupdebuggingwithCDB的说明进行操作在Windows7上。我安装了MSVisualStudio2010和更新我卸载了2010C++运行时。我安装了Windows调试工具和SDK。我还重新更新了2010运行时。完成这一切之后,我现在有了CDB调试器。C:\ProgramFiles\DebuggingToolsforWindows(x64)\cdb.exe在QT中它会自动检测cdb.exe,这就是我的工具包的样子。当尝试运行调试sessi

c++ - gcc 中的模糊重载,适用于 msvc

以下代码在msvc18.00上编译良好,但在gcc4.9.1上编译失败:#includetemplateclassNum{};classZero{};templateNumoperator+(Num,Num){return{};}templateZerooperator+(Num,Num){return{};}intmain(){Numone;Nummone;Numnull;autoa=one+one;static_assert(std::is_same>::value,":(");autob=one+mone;static_assert(std::is_same::value,":(

c++ - 如何在 Qt Creator 中更改/配置所需的编译器?即在 MSVC/Mingw 或 g++/clang++ 之间切换

我知道howtoaddcompilerinQtCreator.但是我的Qt总是选择MSVC编译器。如何设置MinGW(内置或外置)而不是MSVC?找不到任何帖子可以帮助新手了解如何更改所需偏好的编译器。我当前的系统是Windows,但是也欢迎提供有关Linux(g++clang++)的信息。 最佳答案 以下是Qt5.9的方式:在配置新项目时,只选择那些需要的编译器/工具包;对于64位系统,获取latestMinGW并安装在合适的路径上;安装MinGW64时,您可以选择“posixthreads”,而不是“win32threads”以

c++ - 使用较新版本的 MSVC 链接旧版本的运行时?

我拥有VS2008Pro,并想与VS2005的运行时MSVCRT80进行兼容性测试,但我不想为此购买它。有没有办法在没有VS2005的情况下链接到MSVCRT80?谢谢 最佳答案 官方支持nativemulti-targeting直到VisualStudio2010才出现,它允许您选择v100或v90作为您的“平台工具集”。VisualStudio2008中没有此类功能。这里有一个关于如何onecanachievethesameeffectinVisualStudio2008的讨论。,但您的计算机上似乎还需要安装VS2005才能使其

c++ - 与 GCC/MSVC 中的 lambda 转换构造函数不一致

哪个(如果不是两个)违反规范?在MSVC2013和MSVCNov2013CTP上尝试使用MSVC,GCC是MinGWx644.9.1with-std=c++11。templateclassmemoizer{usingfunc_type=ret_type(*)(constint);constfunc_typefunc;std::mapcache;public:memoizer(func_typefunc):func(func){}ret_typeoperator[](constintn){constautoit=cache.find(n);if(it!=cache.end())retur

c++ - msvc is_copy_assignable 始终为真?

#includeclassTest{public:Test(constTest&)=delete;Test&operator=(constTest&)=delete;};voidfn(Test&a,constTest&b){a=b;}static_assert(!std::is_copy_assignable::value,"Testshouldn'tbeassignable");在MSVC2013Update3下编译此代码时static_assert意外失败,并且函数fn编译失败(如预期)。这很矛盾,对吧?我是否滥用了is_copy_assignable?有没有其他方法可以测试这种情

c++ - MSVC 19 删除继承的构造函数

在MSVC19.16下,如果类B显式继承自类A的构造函数,并且还定义了自己的构造函数,则继承的构造函数将被忽略。classA{public:A(){}A(intx){}};classB:publicA{public:usingA::A;B(doublex):A(){}};intmain(){Bb;//errorC2512:'B':noappropriatedefaultconstructoravailable//note:seedeclarationof'B'return0;}在gcc下正确编译。任何人都知道这是一个编译器错误,还是我想念的东西?谢谢。 最佳

c++ - 为什么 new 和 delete 在 MSVC 2010 下的循环中这么慢

当我尝试在循环中创建和删除类的实例时遇到问题。迭代的执行时间是完全不同的。据我了解,这与从内存中删除对象有关。但是,这个操作的行为我不明白。为什么时间不同?我如何解决它?当我在单独的线程中删除对象时,时间是稳定的。classNODE{public:NODE(){}NODE*add(NODE*node){children.push_back(node);returnnode;}virtual~NODE(){for(vector::iteratorit=children.begin();it!=children.end();++it){delete*it;}}vectorchildren;