草庐IT

Static_cast

全部标签

c++ - 关于static_cast的问题

我写了一段代码,但我对它的输出感到困惑:#includeusingnamespacestd;classB{public:virtualvoidfoo(){cout(pb);pd1->foo();pd1->disp();}intmain(intargc,char*argv[]){B*pb=newB();func(pb);return0;}输出是:B::fooD::disp但是据我所知,pb指向类型B。而且里面没有名为disp()的函数?那么,为什么它可以访问D类中的disp()函数? 最佳答案 因为disp()不访问类的任何成员,原则

c++ - 对模板中的所有其他类型执行 static_assert

如何对模板中的所有其他类型执行static_assert(或其他检查)?template//T1,T2,T3,...structfoo{//HowcanI//forT1,T3,T5,T7,...//dosomechecks,forexample://static_assert(std::is_default_constructible::value,"invalidtype");//static_assert(std::is_copy_constructible::value,"invalidtype");}; 最佳答案 请试试这个

c++ - std::static_pointer_cast 是否有任何额外的运行时开销?

相对于static_cast,即。所以,如果我们有这两个类型转换Base*b(newDerived());Derived*d=static_cast(b);//(1)shared_ptrb(newDerived());shared_ptrd=static_pointer_cast(b);//(2)第(2)行会比第(1)行慢吗? 最佳答案 是的,它有更多的开销,因为它必须返回一个新的shared_ptr而不是一个新的原始指针。boost实现是:templateshared_ptrstatic_pointer_cast(shared_p

c++ - 是否可以在成员例程中使用 const_cast 来避免重复代码

在那种情况下可以使用const_cast还是有任何注意事项:classA{public:A():m_someData(5){}int&get(){returnm_someData;};constint&get()const{const_cast(this)->get();};private:intm_someData;};这样做的目的是让get例程可能更加复杂,并且应该避免代码重复。 最佳答案 没有。我不建议那样做。我建议您反向使用const_cast:int&get(){returnconst_cast(const_cast(*t

c++ - 将 16 位立体声转换为 16 位单声道

我正在尝试将16位立体声从WAVE文件转换为16位单声道,但我遇到了一些困难。我尝试将8位立体声转换为单声道,效果很好。这是一段代码:if(bitsPerSample==8){dataSize/=2;openALFormat=AL_FORMAT_MONO8;for(SizeTypei=0;i((static_cast(pData[i*2])+static_cast(pData[i*2+1]))/2);}但是,现在我正尝试对16位音频做几乎相同的事情,但我就是无法让它工作。我只能听到某种奇怪的声音。我尝试将“monoSample”设置为“left”(Uint16monoSample=le

c++ - 如何将低级常量应用于模板变量。我正在尝试编写一个 const_cast 实现

如何让这个static_assert传递到我失败的代码中?我尝试了T周围const的所有排列,但我无法获得constint*。编译器总是将其解释为int*const。templateunionconst_cast_impl{usingCT=constT;static_assert(std::is_same::value,"CTisnotconstint*");Tdata;CTcdata;const_cast_impl(CTptr):cdata(ptr){}operatorT(){returndata;}};intmain(){inta=2;constint*ptr=&a;int*ptr

c++ - Static Cast 访问静态 const 类成员

这个问题在这里已经有了答案:Undefinedreferencetostaticconstint(9个回答)关闭5年前。所以昨天我正在寻找SO,但找不到以下问题的答案。这种情况来self正在使用的一些代码,但这里是MCVE来演示它。我在A.h中定义了一个类A,其中只有一个静态常量。我已经在标题中对其进行了初始化。#ifndefA_H_#defineA_H_classA{public:staticconstinttest=5;~A(){};};#endif/*A_H_*/然后我有一个B类需要从A类访问publicstaticconst。在这个例子中,它将把值深度复制到一个vector中。

c++ - 无法在 C++17 之前的模式下使用 static constexpr 进行编译

为什么以下最小示例不能用c++11或c++14编译,而是用c++17编译>和c++2a?#include#include#include//works://staticconstexprintVALUE_LIMIT_A=std::numeric_limits::max();classClassy{//doesnotworkinc++11(constexprintroduced)norc++14://worksifc++17ornewer:staticconstexprintVALUE_LIMIT_A=std::numeric_limits::max();intVALUE_LIMIT_B

c++ - 有什么理由更喜欢 static_cast 而不是一系列隐式转换?

假设我有一个实现多个接口(interface)的类classCMyClass:publicIInterface1,publicIInterface2{};并且在该类的一个成员函数中,我需要获得一个指向这些接口(interface)之一的void*指针(IUnknown::QueryInterface()中的典型情况。典型的解决方案是使用一个static_cast来实现指针调整:void*pointer=static_cast(this);如果没有从CMyClass继承的已知类,在这种情况下是安全的。但是如果这样的类存在:classCDerivedClass:publicCUnrelat

c++ - 如何仅在实际使用成员模板时才在成员模板中进行 static_assert?

考虑这个简单的类:templateclassFoo{public:Foo(Tconst&val):_val(val){}templateFoo(Fooconst&){static_assert(false,"CannotconvertfromFootoFoo.");}operatorT&(){return_val;}operatorTconst&()const{return_val;}private:T_val;};它允许从模板类型隐式构造并隐式转换回该类型,一个简单的包装器。现在,我不想启用不相关的Foo之间的转换,由于这些隐式构造/转换,这是可能的。我可以将模板化复制构造函数设为私