jjzjj

c++ - Visual Studio 2017 允许在构造函数中使用自身初始化引用成员。它真的是合法的 C++ 吗?

我刚刚在我的代码中发现了一个非常危险的错误,我觉得它应该被编译器捕获。我错了吗?本质上,允许类的引用成员在构造函数中自行初始化。下面是在VisualStudio2017中编译而没有错误或警告的测试代码:structfoo{foo():reference(reference){}int&reference;};intmain(){foofooOb;}更新:我看到这里有一个2009年的类似问题。其他编译器在2017年的行为是否相同,还是VS2017问题?如果他们这样做了,这有点向我暗示这是合法的C++,但我不明白它怎么可能。 最佳答案

C++ 多重继承和向上转换的智能指针销毁导致 VS 2017 中的堆损坏

我在使用上面的代码时遇到了VS调试器的问题:classAnimal{public:};classStupid{public:};classDog:publicStupid,publicAnimal{public:};intmain(){std::unique_ptranimal=std::unique_ptr(newDog());animal.reset();return0;}此代码在执行涉及“ntdl.dll”和“wntdll.pdb”的“animal.reset()”后抛出错误。如果我点击“忽略”多次(3)次,以下是MSVC运行时库生成断言失败的表达式:1-_CrtIsValidH

c++ - CMake:如何在安装了 VS2017 的情况下指定 VS2015.3 工具集

我安装了VS2017,同时安装了VS2017(v141)和VS2015.3(v140)工具集。我需要使用CMake生成一个解决方案,我希望CMake被“愚弄”,就像安装了VS2015一样,这样我就可以使用v140工具集构建项目。我知道这个问题可能与以下问题重复:Howcmakespecify"PlatformToolset"foraVisualStudio2015project?但它提供的解决方案对我没有帮助。错误信息是:SelectingWindowsSDKversion10.0.14393.0totargetWindows10.0.15063.TheCcompileridentif

c++ - 在 MS Visual Studio 2017 中将 boost::thread 与 CMake 一起使用会导致两个编译器错误

我想在我的项目中使用boost::thread并且我使用CMake作为构建工具。然而,即使是非常简单的设置也会导致两个编译器错误:main.cpp#includeintmain(){boost::threadt;return0;}CMakeLists.txtcmake_minimum_required(VERSION2.6)project(ThreadTest)set(Boost_USE_STATIC_LIBSOFF)set(Boost_USE_MULTITHREADEDON)set(Boost_USE_STATIC_RUNTIMEOFF)find_package(Boost1.58.

c++ - Visual Studio 2017 找不到 std::variant

我正在使用VisualStudio2017-15.9.7进行C++开发,看起来我已经安装了必要的模块。但是下面的代码给出了错误——“命名空间“std”没有成员“variant””std::variant在C++17中受支持并且看起来它被引入到VisualStudioin15.0中#include#includeintmain(){std::variantvalue;}之前好像有人问过同样的问题,但是question似乎已被删除。 最佳答案 你也可以去项目>属性>C/C++>语言并将C++LanguageStandard设置为ISOC

c++ - VS 2017 不会隐式地将 const char* 转换为 char*

这个问题在这里已经有了答案:Conversionfromstringliteraltochar*isdeprecated[duplicate](2个答案)关闭4年前。我最近安装了VS2017,遇到了一个奇怪的问题。基本上,如果不明确地将它们转换为(char*),我就不能使用硬编码字符串。如果我说类似Function("test")的话,它只会抛出一个错误,指出constchar*与char*不兼容。我真的不想坚持使用VS2015:(。有人知道如何让VS认识到它们是同一回事吗?非常感谢。

c++ - Visual Studio 2017,智能感知不工作

我刚刚从VS2015升级到2017,语法错误的智能高亮已经完全消失了。我尝试了一些网上找到的建议,主要是Edit->Intellisense->RefreshLocalCache,但是那个选项已经不存在了。在Edit->Intellisense下只有Quickinfo当我按下它时什么都不做,和togglecompletionmode是灰色的我正在使用Windows10,C++项目。我是否需要从VS2015中删除一些旧文件才能使智能感知再次工作?喜欢VC.db文件吗?谢谢 最佳答案 当IntelliSense在某些文件中停止工作时,我

c++ - 传递 Lambda 时,Visual Studio 2017 中的什么扩展消除了 "bool"与 "std::function"的歧义?

以下代码在VisualStudio2017中使用MSVC编译器编译,但在GCC或Clang中编译失败。#include#includevoidfunctionTest(std::function){std::cout要解决这个问题,我们可以像这样使用enable_if:#include#includevoidfunctionTest(std::function){std::cout::value>::type>voidfunctionTest(BOOL_TYPE){std::cout或者我可以通过引入用户类型而不是bool来消除歧义(如果构造函数存在歧义问题,您需要这样做):#incl

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++ - Visual Studio 2017 是否完全支持具有 [[deprecated]] 属性的 N4266?

我目前正在研究C++17的新特性。我偶然发现了这个功能N4266,它指出现在枚举和命名空间也可以使用属性。不同消息来源称,VisualStudio2017已经完全支持该功能。我用[[deprecated]]属性编写了一个测试。对于namespace,这非常有效。但是,不会为枚举生成警告。我的实现有错误吗?我错过了什么吗?enumMyEnum{val=0,vaal[[deprecated]]=val};voidtest(){MyEnume=MyEnum::vaal;//ShouldemitWarning,butdoesnotMyEnume2=MyEnum::val;//NoWarning