草庐IT

c++ - MSVC 编译器错误 C4315 - 未找到文档

今天编译我的应用程序时,我遇到了这个警告(我认为代码是不相关的):warningC4315:'MyClass':'this'pointerformember'MyClass::my_data_'maynotbealigned8asexpectedbytheconstructor我无法在联机帮助、本地安装的帮助或通过谷歌搜索中找到有关此警告的任何文档。我确实在MS论坛上找到了一个链接:NodocumentationforcompilerwarningC4315但没有关于错误本身的信息。你有关于这个错误的任何信息吗?我正在尝试弄清楚如何修复它。 最佳答案

c++ - lambda 如何在 MSVC2017 15.9.3 with/std :c++17? 中使用静态本地错误返回值

下面的示例代码打印来自lambda函数的值,该函数简单地递增并返回静态局部计数器变量的值。它打印0,1和2,3正如预期的那样,gcc和C++17的clang。但在VisualStudioCommunity201715.9.3中没有/std:c++17设置-它打印0,0和2,3相反。#includeintmain(){autof=[]{staticinti=0;returni++;};constintv1=f();//Expectv1=0constintv2=f();//Expectv2=1//Printsthewrongvalues(MSVC15.9.3with/std:c++17)s

c++ - 为什么这个不正确的 std::function 初始化使用 MSVC 编译?

今天遇到一个有趣的问题,由我自己的错字引起。我创建了一个lambda,它接收对结构的引用,并错误地将其设置为std::function,该函数按值接收它的参数。这是一个更简洁的版本:#includestructInputStruct{inti;InputStruct():i(1){}};voidfunction_rcv(std::function&func_ref){InputStructin;func_ref(in);}intmain(){std::functionmy_func=[](InputStruct&in)->bool{returnin.i==1;};function_rc

c++ - MSVC10 Visual Studio 2010是否支持C++显式转换运算符

VisualStudio2010MSVC10是否支持显式转换运算符,或者是否仍需要实现安全的bool习惯用法?此代码无法编译:explicitoperatorbool()const{returnTraits::invalid()!=value;}编译错误:errorC2071:foo::operatorbool':非法存储类 最佳答案 不,VS2010对C++0x的支持非常有限。这是一个listoffeaturesthataresupportedbyVS2010. 关于c++-MSVC1

c++ - msvc 相当于 gcc 的 __BASE_FILE__

在VisualC++中是否有任何等效于__BASE_FILE__的东西?我想知道当前正在由VC++编译的文件的名称。注意:__FILE__展开为当前文件,例如它可能是#include之一。来自gcc的文档:__BASE_FILE__此宏以C字符串常量的形式扩展为主输入文件的名称。这是调用C编译器时指定为参数的源文件。 最佳答案 感谢John的评论,这是一个解决方法。如果您简单地输入__BASE_FILE__=%(Filename),它不会生成文字字符串。所以把它放在双引号之间;我还添加了扩展名,因为%(Filename)没有它。__

c++ - 将指针转换为模板参数 : Comeau & MSVC compile, GCC 失败

考虑以下代码:templateclassbase{};intmain(){basetest;return0;}Comeau和MSVC都可以毫无问题地编译它(除了Comeau警告未使用的变量),而GCC在basetest;上失败行,说明Infunction`intmain()':acaststoatypeotherthananintegralorenumerationtypecannotappearinaconstant-expressiontemplateargument1isinvalid它到底在提示什么?谁是对的——这段代码应该编译吗?值得注意的是,我的GCC版本非常旧(3.4.2

c++ - 在 GCC、Clang 和 MSVC 中,有什么方法可以符合 C++98 而不是 C++03 吗?

metaquestion建议c++98和c++03标签应该是同义词。提问者跟进了IsvalueinitializationpartoftheC++98standard?Ifnot,whywasitaddedintheC++03standard?,一个很好的问题,它阐明了向C++03添加值初始化。将此问题视为后者的后续问题。OP断言现代编译器不会费心区分C++98和C++03。这让我感到惊讶,因为事实证明是三个现代编译器的情况。虽然这个问题可以归结为“RTFM”,但我的搜索没有找到任何结论。海湾合作委员会他们的standards页:TheoriginalISOC++standardwas

c++ - 定义(变量)没有被 MSVC 正确评估?

运行以下代码#include#defineFOO#defineBARdefined(FOO)intmain(){#ifBARstd::cout在VisualStudio显示Bardisabled!,同时在gcc中运行相同的代码或clang显示Barenabled!。这是Microsoft编译器中的错误吗?根据标准,什么是正确的? 最佳答案 根据标准,这是未定义的行为。[cpp.cond],强调我的Priortoevaluation,macroinvocationsinthelistofpreprocessingtokensthatw

c++ - 如何在 C++ 程序崩溃时获取堆栈跟踪? (使用 msvc8/2005)

有时我的C++程序在Debug模式下崩溃,我得到的是一个消息框,提示某些内部内存管理例程(访问未分配的内存等)中的断言失败。但我不知道那是从哪里调用的,因为我没有得到任何堆栈跟踪。我如何获取堆栈跟踪或至少查看它在我的代码中失败的位置(而不是库/内置例程)? 最佳答案 如果发生崩溃,无论您使用的是调试版本还是发布版本,都可以获得有关崩溃发生位置的信息。即使您在没有源代码的计算机上,也可以看到调用堆栈。为此,您需要使用通过EXE构建的PDB文件。将PDB文件放在与崩溃的EXE相同的目录中。注意:即使您拥有相同的源代码,构建两次并使用第一

C++:强制完成模板编译(MSVC/G++)

你好,祝你有美好的一天。以下代码片段在cl.exe(15.00.30729.01)和mingw-g++(4.4.0)上编译:templateclassTest{public:Tt;voiderror(){intdoesNotExist=6;returndoesNotExist;//test;return0;}另外,在cl.exe上你甚至可以逃避这样的事情:templateclassTest{public:Tt;voiderror(){doesNotExist=6;//现在,这显然会发生,因为编译器不会为模板类的方法创建内容,直到有人调用它们。但是,当您设计大型模板类时,这可能会带来问题