草庐IT

constness

全部标签

c++ - 为什么 C++ 中的引用不是 "const"?

我们知道一个“const变量”表示一旦赋值就不能改变变量,像这样:intconsti=1;i=2;上面的程序将无法编译;gcc提示错误:assignmentofread-onlyvariable'i'没问题,我可以理解,但是下面的例子超出了我的理解范围:#includeusingnamespacestd;intmain(){boolalpha(cout);intconsti=1;cout::value::value输出truefalse很奇怪。我们知道,一旦引用被绑定(bind)到一个名称/变量,我们就不能改变这个绑定(bind),我们改变它的绑定(bind)对象。所以我想ri的类型应

c++ - 为什么 C++ 中的引用不是 "const"?

我们知道一个“const变量”表示一旦赋值就不能改变变量,像这样:intconsti=1;i=2;上面的程序将无法编译;gcc提示错误:assignmentofread-onlyvariable'i'没问题,我可以理解,但是下面的例子超出了我的理解范围:#includeusingnamespacestd;intmain(){boolalpha(cout);intconsti=1;cout::value::value输出truefalse很奇怪。我们知道,一旦引用被绑定(bind)到一个名称/变量,我们就不能改变这个绑定(bind),我们改变它的绑定(bind)对象。所以我想ri的类型应

c++ - const_cast 安全吗?

我在const_cast上找不到太多信息.我能找到的唯一信息(在StackOverflow上)是:Theconst_cast()isusedtoadd/removeconst(ness)(orvolatile-ness)ofavariable.这让我很紧张。可以使用const_cast导致意外行为?如果有,是什么?或者,什么时候可以使用const_cast? 最佳答案 const_cast仅当您正在转换最初不是const的变量时才是安全的.例如,如果您有一个函数,其参数为constchar*,你传入一个可修改的char*,const

c++ - const_cast 安全吗?

我在const_cast上找不到太多信息.我能找到的唯一信息(在StackOverflow上)是:Theconst_cast()isusedtoadd/removeconst(ness)(orvolatile-ness)ofavariable.这让我很紧张。可以使用const_cast导致意外行为?如果有,是什么?或者,什么时候可以使用const_cast? 最佳答案 const_cast仅当您正在转换最初不是const的变量时才是安全的.例如,如果您有一个函数,其参数为constchar*,你传入一个可修改的char*,const

c++ - 为什么我们可以在 `std::move` 对象上使用 `const`?

在C++11中,我们可以编写如下代码:structCat{Cat(){}};constCatcat;std::move(cat);//thisisvalidinC++11当我调用std::move时,表示我要移动对象,即我要改变对象。移动一个const对象是不合理的,那么为什么std::move不限制这种行为呢?以后会是个陷阱吧?这里的陷阱意味着布兰登在评论中提到:"Ithinkhemeansit"traps"himsneakysneakybecauseifhedoesn'trealize,heendsupwithacopywhichisnotwhatheintended."在Scot

c++ - 为什么我们可以在 `std::move` 对象上使用 `const`?

在C++11中,我们可以编写如下代码:structCat{Cat(){}};constCatcat;std::move(cat);//thisisvalidinC++11当我调用std::move时,表示我要移动对象,即我要改变对象。移动一个const对象是不合理的,那么为什么std::move不限制这种行为呢?以后会是个陷阱吧?这里的陷阱意味着布兰登在评论中提到:"Ithinkhemeansit"traps"himsneakysneakybecauseifhedoesn'trealize,heendsupwithacopywhichisnotwhatheintended."在Scot

c++ - `const shared_ptr<T>` 和 `shared_ptr<const T>` 之间的区别?

我正在为C++中的共享指针编写一个访问器方法,如下所示:classFoo{public:return_typegetBar()const{returnm_bar;}private:boost::shared_ptrm_bar;}所以为了支持getBar()的const-ness返回类型应该是boost::shared_ptr防止修改Bar它指向。我的猜测是shared_ptr是我想要返回的类型,而constshared_ptr将防止重新分配指针本身以指向不同的Bar但允许修改Bar它指向...但是,我不确定。如果确定知道的人可以确认这一点,或者如果我弄错了,我将不胜感激。谢谢!

c++ - `const shared_ptr<T>` 和 `shared_ptr<const T>` 之间的区别?

我正在为C++中的共享指针编写一个访问器方法,如下所示:classFoo{public:return_typegetBar()const{returnm_bar;}private:boost::shared_ptrm_bar;}所以为了支持getBar()的const-ness返回类型应该是boost::shared_ptr防止修改Bar它指向。我的猜测是shared_ptr是我想要返回的类型,而constshared_ptr将防止重新分配指针本身以指向不同的Bar但允许修改Bar它指向...但是,我不确定。如果确定知道的人可以确认这一点,或者如果我弄错了,我将不胜感激。谢谢!

c++ - 在类定义中定义静态 const 整数成员

我的理解是C++允许在类中定义静态const成员,只要它是整数类型。那么,为什么下面的代码会给我一个链接器错误?#include#includeclasstest{public:staticconstintN=10;};intmain(){std::cout我得到的错误是:test.cpp:(.text+0x130):undefinedreferenceto`test::N'collect2:ldreturned1exitstatus有趣的是,如果我注释掉对std::min的调用,代码编译和链接就好了(尽管前一行也引用了test::N)。知道发生了什么吗?我的编译器是Linux上的gc

c++ - 在类定义中定义静态 const 整数成员

我的理解是C++允许在类中定义静态const成员,只要它是整数类型。那么,为什么下面的代码会给我一个链接器错误?#include#includeclasstest{public:staticconstintN=10;};intmain(){std::cout我得到的错误是:test.cpp:(.text+0x130):undefinedreferenceto`test::N'collect2:ldreturned1exitstatus有趣的是,如果我注释掉对std::min的调用,代码编译和链接就好了(尽管前一行也引用了test::N)。知道发生了什么吗?我的编译器是Linux上的gc