考虑以下C++程序#include#includeintmain(){inta=5,b=7;autopair=std::make_pair(a,b);return0;}使用VC11和gcc-4.7.2fails有不同的错误,虽然它似乎是相关的,而且VC11错误消息更有意义Youcannotbindanlvaluetoanrvalue我从这次失败中了解到的是VC11和我想gcc-4.7.2只有一个std::make_pairmake_pair(_Ty1&&_Val1,const_Ty2&_Val2)实现,它只能接受一个右值引用。之前的VC++版本示例VC10有两个版本,一个接受左值,另一
在C++中。我可以将大多数东西声明为const,例如:变量:constinti=5;斯卡拉有vali=5,但是这只会阻止重新分配,而不是更改对象,如下例所示:C++:constinti[]={1,2,3,4};i[2]=5;//error斯卡拉:vala=Array(1,2,3,4)a(2)=5//aisnowArray(1,2,5,4)成员函数会变得更糟:C++:classFoo{inti;intiPlusFive()const{returni+5;}intincrementI(){return++i;}}我可以肯定,调用iPlusFive不会更改对象,而且我不会意外调用const对
在C++中。我可以将大多数东西声明为const,例如:变量:constinti=5;斯卡拉有vali=5,但是这只会阻止重新分配,而不是更改对象,如下例所示:C++:constinti[]={1,2,3,4};i[2]=5;//error斯卡拉:vala=Array(1,2,3,4)a(2)=5//aisnowArray(1,2,5,4)成员函数会变得更糟:C++:classFoo{inti;intiPlusFive()const{returni+5;}intincrementI(){return++i;}}我可以肯定,调用iPlusFive不会更改对象,而且我不会意外调用const对
我有以下问题:std::mapmap;voidgetColor(Aconst*obj){doubled=map[obj];//doesnotcompilewihtoutconst_cast(obj)//dosomething}我有一个mapstd::map(某处),它存储指向对象A的指针。我有一个getColor函数,它不操作对象A,因此将指向constA的指针作为输入.如果不使用const_cast,函数getColor将无法编译。constcast是一个设计问题,但如果我不想在map中制作键,我不知道如何规避它常量。任何帮助表示赞赏。 最佳答案
我有以下问题:std::mapmap;voidgetColor(Aconst*obj){doubled=map[obj];//doesnotcompilewihtoutconst_cast(obj)//dosomething}我有一个mapstd::map(某处),它存储指向对象A的指针。我有一个getColor函数,它不操作对象A,因此将指向constA的指针作为输入.如果不使用const_cast,函数getColor将无法编译。constcast是一个设计问题,但如果我不想在map中制作键,我不知道如何规避它常量。任何帮助表示赞赏。 最佳答案
我有一个返回constA&的方法。如果我想使用自动,那么正确的方法是什么。这样可以吗?constauto&items=someObject.someMethod();我看到有些人这样做:auto&items=someObject.someMethod();我不确定该使用哪一个,真正的区别是什么......编辑:在这种情况下,这两个是等价的吗?autoitems=someObject.someMethod();auto&items=someObject.someMethod(); 最佳答案 即使这两种形式是等价的在这种情况下,我还是会
我有一个返回constA&的方法。如果我想使用自动,那么正确的方法是什么。这样可以吗?constauto&items=someObject.someMethod();我看到有些人这样做:auto&items=someObject.someMethod();我不确定该使用哪一个,真正的区别是什么......编辑:在这种情况下,这两个是等价的吗?autoitems=someObject.someMethod();auto&items=someObject.someMethod(); 最佳答案 即使这两种形式是等价的在这种情况下,我还是会
在使用ref限定的函数重载时,我从GCC(4.8.1)和Clang(2.9和trunk)中得到了不同的结果。考虑以下代码:#include#includestructfoo{int&bar()&{std::coutClang编译它并输出"constrvalue",而GCC认为这是一个模棱两可的调用,两个const限定函数成为最可行的候选人。如果我提供所有4个重载,那么两个编译器都会输出"non-constrvalue".我想知道哪个编译器--如果有的话--正在做正确的事情,还有哪些相关的标准在起作用。注意:这实际上很重要的原因是实际代码将两个const限定函数声明为constexpr。
在使用ref限定的函数重载时,我从GCC(4.8.1)和Clang(2.9和trunk)中得到了不同的结果。考虑以下代码:#include#includestructfoo{int&bar()&{std::coutClang编译它并输出"constrvalue",而GCC认为这是一个模棱两可的调用,两个const限定函数成为最可行的候选人。如果我提供所有4个重载,那么两个编译器都会输出"non-constrvalue".我想知道哪个编译器--如果有的话--正在做正确的事情,还有哪些相关的标准在起作用。注意:这实际上很重要的原因是实际代码将两个const限定函数声明为constexpr。
我正在使用一个库,该库的类具有一个不同于其构造函数的init函数。每次我创建一个新实例时,我都需要调用,例如:MyClassa;a.init();由于init不是const,这会阻止我创建const实例(我无法编写constMyClassa)。有什么方法可以调用init然后从“hereonout”声明(我猜对于范围的其余部分)我的变量是const?这可行,但依赖于不触及原始变量:MyClassdont_touch;dont_touch.init();constMyClass&a=dont_touch; 最佳答案 如果你使用C++11