草庐IT

c++ - clang 或 gcc 关于此内部类成员访问是否正确?

以下代码在clang上编译和工作,但在gcc上失败并显示“错误:非静态数据成员‘Outer::a’的无效使用”:#include#include#include#include#includeclassOuter{public:boola=false;virtualvoidf()=0;templateclassInner:publicT{public:virtualvoidf()override{a=true;//Note:accessedthroughinheritance,notthroughouterscope}};};structFoo:Outer{};intmain(){Ou

c++ - 不可移动对象数组的初始化 : why does such code fail to compile on GCC?

这是代码示例,其中Test是一个不可复制的和不可移动的类,带有一些virtual成员和用户定义的构造函数,以及B是一个包含Test的原始(C风格)数组的类对象:classTest{public:Test()=delete;Test(constTest&)=delete;Test(Test&&)=delete;Test&operator=(constTest&)=delete;Test&operator=(Test&&)=delete;Test(inta,intb):a_(a),b_(b){}virtual~Test(){}inta_;intb_;};//----------------

c++ - 如何在 Linux gcc 下确定 vswprintf 的缓冲区大小

我需要为格式函数vswprintf()分配足够的缓冲区。当用ANSI字符串做同样的事情时,我使用:vsnprintf(NULL,NULL,pszFormat,args);它返回我所需的缓冲区大小。但是好像这个函数的unicode版本没有这个功能。当我执行时:vswprintf(NULL,NULL,pszFormat,args);结果值总是-1。我找到的唯一解决方案是使用大型静态缓冲区来计算所需的大小。但我不喜欢这个解决方案:staticconstintnBuffSize=1024;staticXCHARevalBuff[nBuffSize];intnSize=vswprintf(eva

c++ - 模板常量类型转换运算符在 linux (gcc) 下不起作用

考虑以下程序:#includetemplateclassPack{public:Pack(){}chardata[s];templateoperatorX&(){return*reinterpret_cast(data);}templateoperatorXconst&()const{return*reinterpret_cast(data);}};intmain(){constPackp;constdoubled(p);std::cout它在Windows下编译良好。在linux下我得到:test.cc:Infunction‘intmain()’:test.cc:17:error:p

c++ - C++11 和 gcc 中的私有(private)和默认构造函数

代码:structA{private:A()=default;//Version1.};structB:publicA{};structC{private:C(){};//Version2.};structD:publicC{};intmain(){Bb;//Compilesunderg++4.7.2Dd;//Compilationerrorunderg++4.7.2}还有两种情况(使用gcc4.7.2):如果我编译此代码(使用A的构造函数的版本1),则没有问题。如果我使用第二个构造函数,gcc会告诉我D::D()是私有(private)的。问题:如果我使用默认构造函数,为什么问题会消

c++ - GCC/LD找不到链接库

操作系统:Windows7Enterprisex64集成开发环境:EclipseJuno/CDT编译器:MinGW4.6.2(C:\MinGW)赞user697111,我无法让ld.exe找到外部库。简单的程序可以正常编译和链接,但是当我尝试使用提供的库添加SQL功能时,我在Eclipse中收到此错误消息:“c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe:找不到-lC:\MinGW\lib\libodbc32.a"。我指定C:\MinGW\lib作为项目库路径。我将C:\MinGW\lib\lib

c++ - 模板特化 - MSVC 和 GCC/MinGW 之间的不同行为

我特化了一个模板,并在MSVC编译器和MinGW/GCC之间遇到了不同的行为。这是头文件://MyClass.h#ifndefMYCLASS_HEADER#defineMYCLASS_HEADERtemplateclassMyClass{public:virtualvoiddoSomething(){//somecode}};//specializationprototypehere#endif现在,区别。为了避免多次定义,我只在头文件中特化了一个原型(prototype),实现在一个cpp文件中。特化是个问题。GCC/MinGW编译器只接受这个:templatevoidMyClass

c++ - GCC 内联汇编中的一个简单的 while 循环

我想使用GCC扩展内联ASM编写以下循环:long*arr=newlong[ARR_LEN]();long*act_ptr=arr;long*end_ptr=arr+ARR_LEN;while(act_ptr一个长度为ARR_LEN的long类型的数组被分配并初始化为零。循环遍历数组,增量为STEP_SIZE。每个触摸的元素都设置为SOME_VALUE。好吧,这是我在GAS中的第一次尝试:long*arr=newlong[ARR_LEN]();asmvolatile("loop:""movl%[sval],(%[aptr]);""leal(%[aptr],%[incr],4),%[ap

c++ - Clang 和 GCC 误推模板参数

我不擅长C++,所以这可能是一个新手错误。我正在尝试制作一个异构链表类型,其中每个节点的类型和列表其余部分的类型在每个节点中都是已知的。这是一个SSSCE:#includetemplatestructhnode{Tdata;hnode*next;};templatestructhnode{Tdata;std::nullptr_tnext;};templatehnodehcons(T&&val,std::nullptr_t){return{std::forward(val),nullptr};}templatehnodehcons(T&&val,hnode&next){return{st

c++ - GCC 可以优化具有编译时常量变量的类的方法吗?

序言我正在使用avr-g++对AVR微Controller进行编程,因此我总是需要获得非常高效的代码。如果参数是编译时常量,GCC通常可以优化一个函数,例如我有函数pin_write(uint8_tpin,boolval)确定AVR的pin寄存器(使用我从整数pin到一对的特殊映射端口/引脚)并写入这些寄存器对应的值。这个函数并不算小,因为它的通用性。但是如果我用编译时常量pin和val调用这个函数,GCC可以在编译时进行所有计算并消除对几个AVR指令的调用,例如sbiPORTB,1sbiDDRB,1漫步让我们编写这样的代码:classA{intx;public:A(intx_):x(