草庐IT

dynamic_casting

全部标签

c++ - 我是否正确地说 const_cast 然后修改绑定(bind)到临时的 ref-to-const 可以吗?

我想检查一下我对此事的理解和结论。在IRC上,有人问:Isitacceptabletoconst_castaconstreferencethat'sboundtoatemporaryobject?翻译:他有一个ref-to-const绑定(bind)到一个临时的,他想抛弃它的const-ness来修改它。我的回答是我问过asimilarquestion以前,共识似乎是临时对象本身并不是天生的const,因此您可以摆脱对它们的引用的const特征,并且通过结果修改它们。而且,只要原来的ref-to-const仍然存在,就不会影响临时对象的生命周期。即:intmain(){constint

c++ - std::to_string、boost::to_string 和 boost::lexical_cast<std::string> 之间有什么区别?

boost::to_string的目的是什么?(在boost/exception/to_string.hpp中找到)以及它与boost::lexical_cast有何不同和std::to_string? 最佳答案 std::to_string,自C++11起可用,专门用于基本数字类型。它还有一个std::to_wstring变种。它旨在产生与sprintf相同的结果。会的。您可以选择这种形式来避免对外部库/头文件的依赖。抛出失败函数boost::lexical_cast和它不会throw的表亲boost::conversion::t

c++ - std::to_string、boost::to_string 和 boost::lexical_cast<std::string> 之间有什么区别?

boost::to_string的目的是什么?(在boost/exception/to_string.hpp中找到)以及它与boost::lexical_cast有何不同和std::to_string? 最佳答案 std::to_string,自C++11起可用,专门用于基本数字类型。它还有一个std::to_wstring变种。它旨在产生与sprintf相同的结果。会的。您可以选择这种形式来避免对外部库/头文件的依赖。抛出失败函数boost::lexical_cast和它不会throw的表亲boost::conversion::t

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++ 中,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++ - 虚拟析构函数 : is it required when not dynamically allocated memory?

如果我的类不动态分配任何内存,我们是否需要虚拟析构函数?例如classA{private:inta;intb;public:A();~A();};classB:publicA{private:intc;intd;public:B();~B();};在这种情况下,我们需要将A的析构函数标记为虚拟吗? 最佳答案 问题不在于您的类是否动态分配内存。如果类的用户通过A指针分配B对象,然后将其删除:A*a=newB;deletea;在这种情况下,如果A没有虚拟析构函数,C++标准会说您的程序表现出未定义的行为。这可不是什么好事。此行为在标准的

c++ - 虚拟析构函数 : is it required when not dynamically allocated memory?

如果我的类不动态分配任何内存,我们是否需要虚拟析构函数?例如classA{private:inta;intb;public:A();~A();};classB:publicA{private:intc;intd;public:B();~B();};在这种情况下,我们需要将A的析构函数标记为虚拟吗? 最佳答案 问题不在于您的类是否动态分配内存。如果类的用户通过A指针分配B对象,然后将其删除:A*a=newB;deletea;在这种情况下,如果A没有虚拟析构函数,C++标准会说您的程序表现出未定义的行为。这可不是什么好事。此行为在标准的

c++ - 为什么在 C++ 内存管理中,术语 "automatic"和 "dynamic"优于术语 "stack"和 "heap"?

关于SO的许多问题和答案,我了解到最好将其生命周期管理为驻留在自动存储而不是堆栈中的对象。此外,动态分配的对象不应被称为驻留在堆上,而是在动态存储中。我知道存在自动、动态和静态存储,但从未真正理解自动堆栈和动态堆之间的区别。为什么首选前者?我不是在问堆栈/堆是什么意思或内存管理是如何工作的。我在问为什么术语自动/动态存储优于术语堆栈/堆。 最佳答案 自动告诉我一些关于对象生命周期的信息:特别是它被自动绑定(bind)到封闭范围,并将被自动销毁>当该范围退出时。动态告诉我对象的生命周期不是由编译器自动控制的,而是在我的直接控制之下。S