草庐IT

const_cast-ing

全部标签

c++ - 使用 std::dynamic_pointer_cast 向上转换 std::shared_ptr

我开始在C++0X/11中使用智能指针,但遇到了一个特殊情况。我想使用shared_ptr向上转换一个对象的实例。Extend类继承自Base类,其中Base类具有虚拟析构函数以使其具有多态性(否则dynamic_pointer_cast会提示非多态类转换)。如果因此:std::shared_ptrobj=std::make_shared();然后我做:obj=std::dynamic_pointer_cast(obj);安全吗?其他指向该对象的指针会怎样?是否只有obj将其视为Extend,而其他共享指针仍将其视为Base?向上转换同一实例是否安全,还是我应该做其他事情?编辑:感谢您

c++ - 是否可以根据模板参数的常量性有条件地启用模板类的非 const/const 数据成员?

是否可以根据模板参数的常量性有条件地启用模板类的非const/const数据成员?或者可能有一些条件类型定义?我考虑过将std::enable_if与std::is_const一起使用,但没有我可以使用的std::is_not_const。classA;templateclassTest{A&m_a;//IfT!=const.constA&m_a;//IfT==const.};请注意总是T!=A。 最佳答案 是的,您可以使用std::conditional:templateclassTest{typenamestd::conditi

c++ - 如何测试方法是否为const?

如何获取一个bool值来指示已知方法是否具有const限定符?例如:structA{voidmethod()const{}};structB{voidmethod(){}};booltestA=method_is_const::value;//ShouldbetruebooltestB=method_is_const::value;//Shouldbefalse在type_traitsheader我找到了一个is_const我可以使用测试,但我需要方法类型,但我不确定如何获取它。我试过:std::is_const::value但它不起作用,我能理解为什么(void(*ptr)()con

c++ - 断言中的 dynamic_cast 导致错误

我正在使用过时的VisualStudio2008(让我为您省去“这是您的问题”的麻烦。)这似乎是VisualStudio的问题:http://rextester.com/XKFR77690这似乎是assert的问题宏:http://ideone.com/bhxMi0给定这些结构:structbase{virtual~base(){}};templatestructFoo:base{Tfoo;};我能做到:base*test=newFoo>;if(dynamic_cast>*>(test)!=NULL)cout但是当我使用与if中完全相同的代码时-assert中的声明:assert(dy

c++ - 对于函数 : constexpr const or enum? 中的常量,我应该更喜欢哪个

我习惯用enum{my_const=123;来定义常量},因为在类中,使用staticconstexpr需要类定义之外的一些代码(参见thisquestion)。但是-在函数体中呢?最近我一直注意到人们只是在他们的函数中使用constexpr变量(实际上甚至不屑于const它们),我想知道我是否是一个落后的傻瓜我的时代intfoo(intx){enum:int{bar=456};returnx+bar;}所以,我的问题是:在函数体内使用枚举而不是constexpr变量有什么好处吗? 最佳答案 如果bar是constexprintba

c++ - 带有 const 指针的 boost::dynamic_pointer_cast 不起作用?

假设我有两个类,A和B,其中B是A的子类。我还有以下功能:voidfoo(boost::shared_ptra){boost::shared_ptrb=boost::dynamic_pointer_cast(a);//Error!}用gcc编译会出现以下错误:C:\Boost\include/boost/smart_ptr/shared_ptr.hpp:Inconstructor'boost::shared_ptr>::shared_ptr(constboost::shared_ptr&,boost::detail::dynamic_cast_tag)[withY=constA,T=c

C++ - const 成员/返回 const int& 与 return int

那些C++行是什么意思?是否有其他方式来编写它们?constint&a()const;intgetA()const;谢谢。 最佳答案 这两个是promise不更改对象本身的类中成员函数的两个可能签名。在第一种情况下,它将返回一个对整数(可能是成员属性)的常量引用,引用是const意味着调用者将无法使用它来更改内部属性。第二种情况它按值返回一个整数。在语义上略有不同,但大多数情况下它们并不重要,将它们视为两个获取值的函数。对于它会有所作为的情况,请参见:classtest{public:test():m_value(){std::co

c++ - extern const char* const SOME_CONSTANT 给我链接器错误

我想像这样在API中提供一个字符串常量:externconstchar*constSOME_CONSTANT;但是如果我在我的静态库源文件中将它定义为constchar*constSOME_CONSTANT="test";当链接到该库并使用SOME_CONSTANT时,我遇到链接器错误:Error1errorLNK2001:unresolvedexternalsymbol"charconst*constSOME_CONSTANT"(?SOME_CONSTANT@@3QBDB)从externconstchar*const声明和定义中删除指针常量(第二个const关键字)使其工作。如何使用

c++ - 为什么 lexical_cast 要求运算符>>位于匹配的 namespace 中?

这是一个测试用例:#include#includenamespaceN{enumclassalarm_code_t{BLAH};}std::istream&operator>>(std::istream&is,N::alarm_code_t&code){std::stringtmp;is>>tmp;if(tmp=="BLAH")code=N::alarm_code_t::BLAH;elseis.setstate(std::ios::failbit);returnis;}intmain(){autocode=boost::lexical_cast("BLAH");}Boost拒绝转换,声

c++ - 如何确定一个类型是否可以仅使用 const 引用调用?

我想写一个C++元函数is_callable定义value成为true,当且仅当类型F具有SomeReturnTypeoperator()(constArg&)形式的函数调用运算符时.例如,在下面的情况下structfoo{voidoperator(constint&){}};我要is_callable成为false和is_callable成为true.这是我到目前为止所拥有的:#include#includetemplatestructis_callable{private:templatestaticchar(&test(...))[2];templatestructhelper{