草庐IT

c++ - 为什么在 C++1z 的这个例子中,clang 和 g++ 为 a1.v 和 a2.v 打印 0?

请参阅[class.base.init]/11中的示例structA{A()=default;//OKA(intv):v(v){}//OKconstint&v=42;//OK};Aa1;//error:ill-formedbindingoftemporarytoreferenceAa2(1);//OK,unfortunatelyclang和g++都编译代码(clang带有警告),但我想了解为什么它们为成员a1.v打印0和a2.v?参见demo. 最佳答案 他们打印0并不重要。对于a1,初始化的格式不正确。对于a2,您将引用绑定(bi

c++ - G++ 多平台内存泄漏检测工具

有谁知道我在哪里可以找到适用于C++的内存泄漏检测工具,它既可以在命令行中运行,也可以作为Windows和Linux中的Eclipse插件运行。我希望它易于使用。最好是不覆盖new()、delete()、malloc()或free()的方法。如果它会在命令行中,则类似于GDB,但我不记得它用于检测内存泄漏。如果有一个单元测试框架可以自动执行此操作,那就太好了。这个问题类似于其他问题(例如MemoryleakdetectionunderWindowsforGNUC/C++),但我觉得它是不同的,因为那些要求特定于Windows的解决方案或有我宁愿避免的解决方案。我觉得我正在寻找更具体的东

c++ - 使用 g++ 编译器打印 C++ 对象的布局

有没有办法使用g++编译器或任何其他方式打印C++对象的布局。一个简化的例子(假设int占用4个字节)classA{inta;};classB:publicA{intb;}所以输出是A-04+a+B-048+A.a+b+了解对象的布局(在我的例子中是虚拟机代码)会很有用。提前致谢。问候,扎西尔 最佳答案 查看手册页,-fdump-class-hierarchy也许吧?请注意,从GCC8开始,-fdump-class-hierarchy选项已被替换为-fdump-lang-class。 关

c++ - clang/g++ 与友元函数的区别

为什么下面的代码在g++中编译良好,但在clang上却出错?#includeclassObject{};classPrint{public:templateinlinefriendstd::basic_ostream&operator&out,constObject&){return(out证明链接:g++/clang++当我将友元函数移动到全局命名空间时,代码为两个编译器编译得很好(clang++/g++)。在这种情况下,哪种实现更符合C++标准? 最佳答案 Clang在这里是正确的。在类内部定义的友元函数只能通过对其参数使用参数

c++ - 为什么使用局部结构作为 STL 函数参数的代码不能在 g++ 中编译?

我有这样的代码运行良好:#include#includecharx[11]="ABCDEFGHIJ";chary[11];structF{charoperator()(charc)const{returnc+1;}};intmain(){std::transform(x,x+10,y,F());y[10]=0;std::cout但是如果我把它改成这种风格:#include#includecharx[11]="ABCDEFGHIJ";chary[11];intmain(){structF{charoperator()(charc)const{returnc+1;}};std::trans

c++ - 我如何知道 Ubuntu 11.04 中 gcc、g++/c++ 的 "default include directories"、 "default link directories"和 "default link libraries"?

对于以下3种编译情况:gcc-ohellochello.c(1)g++-ohellocpphello.cpp(2)c++-ohellocpphello.cpp(3)我如何知道每种情况下的“默认包含目录”、“默认链接目录”和“默认链接库”?我在32位Ubuntu11.04环境中使用gcc4.5.2。对于情况(1),gcc使用的是标准C库还是GNUC库?这两个C库之间有区别吗?比较情况(2)和(3),编译器使用的“默认链接库”有什么不同吗?他们使用的是标准C++库还是GNUC++库?这两个C++库有什么区别?提前感谢您的任何建议。曾国荣 最佳答案

c++ - constexpr 问题,为什么这两个不同的程序在 g++ 中运行的时间如此不同?

我正在使用gcc4.6.1并得到一些有趣的行为,涉及调用constexpr函数。该程序运行良好,并立即打印出12200160415121876738。#includeexternconstunsignedlongjoe;constexprunsignedlongfib(unsignedlongintx){return(x这个程序需要很长时间才能运行,我从来没有耐心等待它打印出一个值:#includeconstexprunsignedlongfib(unsignedlongintx){return(x为什么会有这么大的差异?我在第二个程序中做错了吗?编辑:我在64位平台上使用g++-st

c++ - 是否有一个(Linux)g++相当于/fp :precise and/fp:fast flags used in Visual Studio?

背景:许多年前,我继承了一个代码库,该代码库使用VisualStudio(VC++)标志“/fp:fast”在特定的计算量大的库中生成更快的代码。不幸的是,'/fp:fast'产生的结果与不同编译器(BorlandC++)下的同一个库略有不同。因为我们需要产生完全相同的结果,所以我切换到“/fp:precise”,效果很好,从那以后一切都很顺利。但是,现在我在uBuntuLinux10.04上用g++编译同一个库,我看到了类似的行为,我想知道它是否有类似的根本原因。我的g++构建的数值结果与我的VC++构建的数值结果略有不同。这引出了我的问题:问题:g++是否具有与VC++中的“fp:

c - 我怎样才能 ENABLE_VIRTUAL_TERMINAL_PROCESSING?

前段时间我注意到有一个新的控制台模式ENABLE_VIRTUAL_TERMINAL_PROCESSING,我决定尝试一下。这是我的示例代码://File:test1.c#include#include#include#includeconstchar*constTEST_STRING="\x1B[31;1mRed\x1B[0m\x1B[32;1mGreen\x1B[0m\x1B[34;1mBlue\x1B[0m";voidErrorExit(constchar*errorMessage){puts(errorMessage);exit(1);}intmain(intargc,char*

c++ - 如何在 g++ 中使用 "use unicode character set"?

我正在用C++开发一个程序,我试图在Windows中使用WriteProcessMemory()函数。为此,我需要一个获取目标进程ID的函数。我可以使用以下功能做到这一点:#pragmaonce#include#include#include//getprocessidfromexecutablenameusingtlhelp32snapshotDWORDGetProcID(wchar_t*exeName){PROCESSENTRY32procEntry={0};HANDLEhSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)