草庐IT

c++ - 如何获得一个const限定的declval?

考虑以下代码:#include#include#includestructBase{intf()const;doublef();};structDerived:publicBase{template().f())>//ModifythisTg()const;};intmain(){constDerivedx;std::cout如何修改decltype(std::declval().f())这样它就会返回int而不是double?我试过了decltype(std::declval().f()但它不编译。 最佳答案 GCC4.8.1喜欢

c++ - 具有结构化绑定(bind)的不同 cv 限定符

structuredbindingdeclaration在C++17中允许几个不同的选项,例如:std::tuplefoo();auto[a,b]=foo();//aandbare:intconstauto[a,b]=foo();//aandbare:intconstconstauto&[a,b]=foo();//aandbare:intconst&有什么方法可以给a和b不同的cv限定符吗?例如a的类型为int和b的类型为intconst? 最佳答案 否-这包含在proposal中的问答:Shouldthesyntaxbeexten

单个限定名称和两个连续名称之间的 C++11 歧义?

下面的C++11程序格式错误吗?structa{structb{};voidf(){};};externstructab;structa::b;intmain(){b.f();}为什么/为什么不?这里感兴趣的是这一行:structa::b;这是内部类a::b的前向声明吗?或者这是全局变量b的定义?相当于:structa(::b); 最佳答案 structa::b;不会声明类型为a的名为b的变量,如果这是您要问的。它是嵌套类型a::b的(冗余)前向声明。空格在C++程序中通常不重要。因此,您的程序声明但从未定义名为b的变量。这违反了一

c++ - 为什么函数参数中的 const 限定符用于重载解析?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:FunctionswithconstargumentsandOverloading我对重载和const声明规则感到很困惑。这里有两件让我困惑的事情,也许你能帮助我找到我头脑中更深层次的误解,这些误解导致我对它们感到困惑。;)第一期:我的编译器允许这样做:voidf(int&x){std::cout但是下面会导致编译错误(函数已经有主体):voidf(intx){std::cout我想这是有道理的,因为我认为const只是告诉编译器传递的对象没有改变,在第二种情况下它无论如何都会被复制。但如果这是正确的,那么为

c++ - 丢失 const volatile 限定词

我有一个编译错误:errorC3848:expressionhavingtype'constunicode::endian_swap'wouldlosesomeconst-volatilequalifiersinordertocall'unsignedlongunicode::endian_swap::operator()(T&)'此错误的描述,Here,并没有真正解释发生了什么。我无法在较小的示例中重现错误,但我可以展示我的类的基本布局。templatestructendian_swap{endian_swap(void){}Toperator()(T&_val)const{retu

c++ - 完全限定的静态成员变量中的歧义

在这个示例代码中,有两个句子显示同一个静态变量。第一个没有歧义,但第二个有,为什么?#includeusingnamespacestd;structA{staticconstchara='a';};structB:publicA{};structC:publicA{};structG:publicB,publicC{};intmain(){Gv;coutGCC错误(根据一些评论,clang没有歧义):main.cpp:15:18:error:'A'isanambiguousbaseof'G'coutCodeoncoliru 最佳答案

c++ - 将指针分配给带或不带限定符的指针

这个问题在这里已经有了答案:constnessandpointerstopointers(4个答案)关闭9年前。编译时:char*p2c;constchar*p2cc=p2c;//fine因为lhspointedtype具有rhspointedtype的所有限定符,所以这不是:char**p2p2c;constchar**p2p2cc=p2p2c;//fail但这确实:constchar*const*p2cp2cc=p2p2c;//fine为什么会发生这种情况?

c++ - 内联限定符源于原型(prototype)还是定义?

我不太确定标准中的这一点。假设我有三个这样的文件:foo.h#includeinlinevoidfoo();voidfoo(){std::coutfoo.cpp:#include"foo.h"voidbaz();intmain(){baz();foo();}bar.cpp#include"foo.h"voidbaz(){foo();}现在,foo的定义将被编译到两个编译单元foo.o和bar.o中。如果我理解正确的话,拥有内联函数将避免链接器冲突。G++编译并链接这很好,但是使用clang++2.8我得到这个错误:/tmp/cc-7RdmYP.o:Infunction`foo()':b

c++ - 为什么获取成员函数指针值需要在类内部进行类名限定?

当在该类的一个成员函数中返回一个指向该类的成员函数指针时,我仍然必须指定该类。我不能简单地接受地址。例如,thiscodeworksfine:classFoo{public:voidfunc(intparam){cout但是如果在getPointer中我尝试简单地做:return&func我得到这个错误:prog.cpp:Inmemberfunction'void(Foo::*Foo::getPointer())(int)':prog.cpp:8:43:error:ISOC++forbidstakingtheaddressofanunqualifiedorparenthesizedno

C++11 noexcept 限定符和内联方法

当调用使用noexcept限定符声明的其他函数时,C++11是否对inline函数或方法提供任何保证?classMy_String{...constchar*c_str()constnoexcept;inlineoperatorconstchar*()const{returnc_str();}};我假设优化编译器可以根据noexcept资格自由实现内联方法,而无需完全EH和堆栈展开。我也希望这也适用于简单的访问器方法:...inlineoperatorconstchar*()const{returnm_buffer;}虽然这个例子看起来微不足道,但异常保证在用于实现其他类或函数时很重要