草庐IT

const_cast-ing

全部标签

c++ - 通过值可变捕获的 lambda 不适用于 const &?

考虑以下几点:voidtest(constint&value){autotestConstRefMutableCopy=[value]()mutable{value=2;//compileerror:Cannotassigntoavariablecapturedbycopyinanon-mutablelambda};intvalueCopy=value;autotestCopyMutableCopy=[valueCopy]()mutable{valueCopy=2;//compilesOK};}当我将lambda声明为可变并按值捕获value时(我认为是复制了它),为什么第一个版本会出

c++ - lexical_cast int 到字符串

忽略boost::lexical_cast的异常是否安全?将int转换为std::string时? 最佳答案 将int转换为std::string时词法转换引发的异常与转换无关,但与资源不可用有关。因此,您可以像忽略operatornew引发的异常bad_alloc一样忽略它。 关于c++-lexical_castint到字符串,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/27

c++ - lexical_cast int 到字符串

忽略boost::lexical_cast的异常是否安全?将int转换为std::string时? 最佳答案 将int转换为std::string时词法转换引发的异常与转换无关,但与资源不可用有关。因此,您可以像忽略operatornew引发的异常bad_alloc一样忽略它。 关于c++-lexical_castint到字符串,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/27

c++ - dynamic_cast 是如何工作的?

如果您有以下情况:classAnimal{};classBird:publicAnimal{};classDog:publicAnimal{};classPenguin:publicBird{};classPoodle:publicDog{};dynamic_cast是否只检查一个类是否是另一个类的派生类,或者一个类是否是另一个类的基类?所以如果我有:Bird*bird;Animal*animal;bird=dynamic_cast(bird);animal=dynamic_cast(animal);bird现在将指向一个Animal类,这样我就可以使用bird->some_funct

c++ - dynamic_cast 是如何工作的?

如果您有以下情况:classAnimal{};classBird:publicAnimal{};classDog:publicAnimal{};classPenguin:publicBird{};classPoodle:publicDog{};dynamic_cast是否只检查一个类是否是另一个类的派生类,或者一个类是否是另一个类的基类?所以如果我有:Bird*bird;Animal*animal;bird=dynamic_cast(bird);animal=dynamic_cast(animal);bird现在将指向一个Animal类,这样我就可以使用bird->some_funct

c++ - 为什么 const 变量必须立即初始化?

这是一个通用的编程问题。我正在学习C++,并且了解到任何const变量,即:constinti或int*constptr,都必须立即初始化。这也是地址引用必须立即初始化的根本原因,因为地址是const。但我找不到必须这样做的原因/为什么要强制执行此规则。谁能帮我解释一下? 最佳答案 因为您无法在以后对其进行初始化或赋值。constintsize;//noinitialization(error)size=100;//error-youcannotassignaconstvariable.现在,如果一个变量既没有任何有意义的值,也因为

c++ - 为什么 const 变量必须立即初始化?

这是一个通用的编程问题。我正在学习C++,并且了解到任何const变量,即:constinti或int*constptr,都必须立即初始化。这也是地址引用必须立即初始化的根本原因,因为地址是const。但我找不到必须这样做的原因/为什么要强制执行此规则。谁能帮我解释一下? 最佳答案 因为您无法在以后对其进行初始化或赋值。constintsize;//noinitialization(error)size=100;//error-youcannotassignaconstvariable.现在,如果一个变量既没有任何有意义的值,也因为

c++ - 基于范围的隐式添加 `const` 限定符?

让我们看看下面这个简单的基于范围的for循环:inta=5,b=6;for(auto&i:{a,b}){std::coutgcc提示assignmentofread-onlyreference'i',暗示与初始化列表一起使用的基于范围的for循环隐式添加了const限定引用,完全无端。为什么会这样?是否有一种变通方法允许在基于for循环的范围内修改变量? 最佳答案 在inta=5,b=6;for(auto&i:{a,b})你有那个{a,b}是std::initialiser_list两个元素,a和b,其中a的值和b被复制。现在,st

c++ - 基于范围的隐式添加 `const` 限定符?

让我们看看下面这个简单的基于范围的for循环:inta=5,b=6;for(auto&i:{a,b}){std::coutgcc提示assignmentofread-onlyreference'i',暗示与初始化列表一起使用的基于范围的for循环隐式添加了const限定引用,完全无端。为什么会这样?是否有一种变通方法允许在基于for循环的范围内修改变量? 最佳答案 在inta=5,b=6;for(auto&i:{a,b})你有那个{a,b}是std::initialiser_list两个元素,a和b,其中a的值和b被复制。现在,st

c++ - 如何使用 dynamic_cast 运算符识别失败的强制转换?

ScottMeyer在他的书EffectiveC++中说dynamic_cast用于执行向下或跨继承层次结构的安全转换。也就是说,您使用dynamic_cast将基类对象的指针或引用转换为派生或同级基类对象的指针或引用,这样您就可以确定转换是否成功。失败的转换由空指针(转换指针时)或异常(转换引用时)指示。我想得到两个代码片段,在可以指示转换指针和转换引用的情况下显示失败的转换。 最佳答案 对于指针,这是一个简单的空检查:A*a=newA();B*b=dynamic_cast(a);if(b==NULL){//Castfailed}