草庐IT

const_cast-ing

全部标签

c++ - 为什么 scala 没有类似 C++ 的 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对

c++ - 为什么 scala 没有类似 C++ 的 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对

c++ - 如何避免 const cast 进行 map 访问?

我有以下问题:std::mapmap;voidgetColor(Aconst*obj){doubled=map[obj];//doesnotcompilewihtoutconst_cast(obj)//dosomething}我有一个mapstd::map(某处),它存储指向对象A的指针。我有一个getColor函数,它不操作对象A,因此将指向constA的指针作为输入.如果不使用const_cast,函数getColor将无法编译。constcast是一个设计问题,但如果我不想在map中制作键,我不知道如何规避它常量。任何帮助表示赞赏。 最佳答案

c++ - 如何避免 const cast 进行 map 访问?

我有以下问题:std::mapmap;voidgetColor(Aconst*obj){doubled=map[obj];//doesnotcompilewihtoutconst_cast(obj)//dosomething}我有一个mapstd::map(某处),它存储指向对象A的指针。我有一个getColor函数,它不操作对象A,因此将指向constA的指针作为输入.如果不使用const_cast,函数getColor将无法编译。constcast是一个设计问题,但如果我不想在map中制作键,我不知道如何规避它常量。任何帮助表示赞赏。 最佳答案

c++ - 如何在 C++ 中将 auto 与 const 和 & 一起使用?

我有一个返回constA&的方法。如果我想使用自动,那么正确的方法是什么。这样可以吗?constauto&items=someObject.someMethod();我看到有些人这样做:auto&items=someObject.someMethod();我不确定该使用哪一个,真正的区别是什么......编辑:在这种情况下,这两个是等价的吗?autoitems=someObject.someMethod();auto&items=someObject.someMethod(); 最佳答案 即使这两种形式是等价的在这种情况下,我还是会

c++ - 如何在 C++ 中将 auto 与 const 和 & 一起使用?

我有一个返回constA&的方法。如果我想使用自动,那么正确的方法是什么。这样可以吗?constauto&items=someObject.someMethod();我看到有些人这样做:auto&items=someObject.someMethod();我不确定该使用哪一个,真正的区别是什么......编辑:在这种情况下,这两个是等价的吗?autoitems=someObject.someMethod();auto&items=someObject.someMethod(); 最佳答案 即使这两种形式是等价的在这种情况下,我还是会

c++ - 在 C++ 中,static_cast<double>(a) 和 double(a) 有什么区别?

两者有什么区别inta;//agetssomevaluedoublepi=static_cast(a)/3;和inta;//agetssomevaluedoublepi=double(a)/3;你见过后者吗?在我看来,我在Stroustrup编写的一些片段中看到了它,但我找不到引用。 最佳答案 可能有人认为他们是在构建而不是在类型转换。考虑:some_fun(std::string("Hello"));许多人认为他们在那里调用了构造函数,而实际上他们正在执行C风格的转换。碰巧的是,强制转换会在它查看的一长串其他东西中查看目标类型的构

c++ - 在 C++ 中,static_cast<double>(a) 和 double(a) 有什么区别?

两者有什么区别inta;//agetssomevaluedoublepi=static_cast(a)/3;和inta;//agetssomevaluedoublepi=double(a)/3;你见过后者吗?在我看来,我在Stroustrup编写的一些片段中看到了它,但我找不到引用。 最佳答案 可能有人认为他们是在构建而不是在类型转换。考虑:some_fun(std::string("Hello"));许多人认为他们在那里调用了构造函数,而实际上他们正在执行C风格的转换。碰巧的是,强制转换会在它查看的一长串其他东西中查看目标类型的构

c++ - 我可以从现在开始创建一个变量 _const 吗?

我正在使用一个库,该库的类具有一个不同于其构造函数的init函数。每次我创建一个新实例时,我都需要调用,例如:MyClassa;a.init();由于init不是const,这会阻止我创建const实例(我无法编写constMyClassa)。有什么方法可以调用init然后从“hereonout”声明(我猜对于范围的其余部分)我的变量是const?这可行,但依赖于不触及原始变量:MyClassdont_touch;dont_touch.init();constMyClass&a=dont_touch; 最佳答案 如果你使用C++11

c++ - 我可以从现在开始创建一个变量 _const 吗?

我正在使用一个库,该库的类具有一个不同于其构造函数的init函数。每次我创建一个新实例时,我都需要调用,例如:MyClassa;a.init();由于init不是const,这会阻止我创建const实例(我无法编写constMyClassa)。有什么方法可以调用init然后从“hereonout”声明(我猜对于范围的其余部分)我的变量是const?这可行,但依赖于不触及原始变量:MyClassdont_touch;dont_touch.init();constMyClass&a=dont_touch; 最佳答案 如果你使用C++11