草庐IT

static-analysis

全部标签

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++ - 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之间的转换,由于这些隐式构造/转换,这是可能的。我可以将模板化复制构造函数设为私

c++ - C 和 C++ 中的 Const、static、extern 及其组合

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。1)static、extern和const有何不同,它们在C和C++中的使用有何不同?(默认联动等差异)2)C中使用的头文件中允许以下声明和定义,然后包含在多个文件中。staticinttestvar=233;externintone;externintshow();intabc;constintxyz;//constintxyz=123;produceserrorconstdefinition

c++ - “static const”、 “#define” 和 “enum” 在性能和内存使用方面的区别

可能是因为#define语句的内联。我知道答案可能取决于编译器,那么假设是GCC。已有类似问题aboutC和aboutC++,但它们更多地是关于使用方面的。 最佳答案 编译器会在给定基本优化后将它们视为相同。检查起来相当容易-考虑以下C代码:#definea1staticconstintb=2;typedefenum{FOUR=4}enum_t;intmain(){enum_tc=FOUR;printf("%d\n",a);printf("%d\n",b);printf("%d\n",c);return0;}用gcc-O3编译:00

c++ - 带 static_assert() 的逗号运算符

当尝试使用static_assert作为参数来计算逗号运算符时编译失败voidfvoid(){}intmain(){inta=(1,2);//a=2intb=(fvoid(),3);//b=3intd=(,5);//^//error:expectedprimary-expressionbefore','token.OKintc=(static_assert(true),4);//^~~~~~~~~~~~~//error:expectedprimary-expressionbefore'static_assert'.Why?}看起来static_assert()在编译后甚至没有解析为vo