草庐IT

static_foo

全部标签

C++ : Initializing base class constant static variable with different value in derived class?

我有一个带有常量静态变量a的基类A。我需要类B的实例对静态变量a具有不同的值。这怎么能实现,最好是静态初始化?classA{public:staticconstinta;};constintA::a=1;classB:publicA{//???//Howtoset*a*toavaluespecifictoinstancesofclassB?}; 最佳答案 你不能。所有派生类共享一个静态变量实例。 关于C++:Initializingbaseclassconstantstaticvaria

c++ - 在派生对象到基类的 "this"指针上使用 static_cast 的问题

这是取自EffectiveC++3ed的一个例子,它说如果这样使用static_cast,对象的基础部分被复制,并且调用从该部分调用。我想了解幕后发生的事情,有人会帮忙吗?classWindow{//baseclasspublic:virtualvoidonResize(){}//baseonResizeimpl};classSpecialWindow:publicWindow{//derivedclasspublic:virtualvoidonResize(){//derivedonResizeimpl;static_cast(*this).onResize();//cast*thi

c++ - std::static_pointer_cast 与 static_cast<std::shared_ptr<A>>

我有一个类层次结构,其中B源自A像这样:classA:publicstd::enable_shared_from_this{};classB:publicA{voidf(){//thecodebelowcompilesstd::shared_ptrcopyOfThis=std::static_pointer_cast(shared_from_this());//thecodebelowdoesnotstd::shared_ptrcopyOfThis=static_cast>(std::make_shared(shared_from_this()));}};所以实际上我想了解为什么我不能

c++ - NULL 指针与 static_cast 的兼容性

Q1。为什么在static_cast中使用NULL指针会导致崩溃,而dynamic_cast和reinterpret_cast会返回NULL指针?问题发生在类似于下面给出的方法中:voidA::SetEntity(B*pEntity,intiMyEntityType){switch(iMyEntityType){caseENTITY1:{Set1(static_cast(pEntity));return;}caseENTITY2:{Set2(static_cast(pEntity));return;}caseENTITY3:{Set3(static_cast(pEntity));ret

c++ - static_if 会弃用模板特化吗?

像这样的一些常用模板特化:templateclassC{voidcommon(){...}voidf2=delete;};templateclassC{voidcommon(){...}voidf1(){...}};可以用static_if表示作为:templateclassC{voidcommon(){...}static_if(std::is_same::value){voidf1(){...}}else{voidf2()=delete;}}这些是直接竞争的功能吗?模板特化可以做static_if做不到的事情吗?看起来static_if可以做模板特化可以做的一切,甚至更多。顺便说一

c++ - 未解析的外部符号 "private: static int Math::result"

这个问题在这里已经有了答案:Whatisanundefinedreference/unresolvedexternalsymbolerrorandhowdoIfixit?(38个答案)关闭8年前。这是我的类定义:#includeusingnamespacestd;classMath{private:staticintresult;public:staticintadd(inta,intb){result=a+b;returnresult;};};这是主要的:#include#include"Amin.cpp"usingnamespacestd;intmain(){Math::add(2

c++ - 关于带有函数和数据的static关键字的问题

我有几个关于C++中的static关键字的问题(可能还有其他语言。)将函数声明为静态的目的是什么?voidstaticfoo(intaNumber){...}静态内联函数怎么样?voidstaticinlinefoo(intaNumber){...}在函数中使用static关键字有什么好处吗?这些好处是否也适用于类函数?我意识到某些数据类型(如结构和数组)在使用较旧的编译器进行编译时必须是静态的,但是在使用新的ANSI-C++编译器(如MSVC++2008)时有什么意义吗?我知道在循环内使用静态变量可以通过将数据保存在内存中而不是在每次循环迭代时重新分配内存来节省时间,但是当变量只声明

c++ - 我看到许多使用 "Foo ^ bar"的 C++ 示例 - 什么是 "^"?

与.NET相关吗?它似乎是某种指针,有什么区别?编辑:我实际上知道它是XOR运算符,但是从这个页面看这个例子。voidobjectCollection(){usingnamespaceSystem::Collections;**ArrayList^as=gcnewArrayList;**//...}这是什么?谢谢。 最佳答案 我假设您正在查看以下形式的结构:Foo^bar=gcnewFoo();你是对的,在.NET中它是一个“类似”指针的类型并且是C++/CLI的一部分,但不是标准的ISOC++。它是对垃圾收集的托管.NET对象的引

c++ - char *foo 与 char* foo

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。简单的问题是:你为什么要写char*foo;不是char*foo;让我解释一下:对我(来自Java)来说,声明类似于;在上面的例子中,我声明了一个名为foo的变量,类型为char*(因为它是一个指向char的指针)。但无论我在哪里阅读c/c++/c#-Code,它看起来都像是一个名为*foo的char类型的变量。编译器不关心空格,但我作为开发人员关心。t

c++ 多态性 ((X*)y)->foo() vs ((X)*y).foo()

假设Y是类X的派生类,并且X声明foo是虚拟的。假设y是类型(Y*)。然后((X*)y)->foo()将执行Y版本的foo(),但((X)*y).foo()将执行X版本。你能告诉我为什么多态性不适用于取消引用的情况吗?我希望这两种语法都能产生Y版本的foo()。 最佳答案 您正在切片Y对象部分并将该对象复制到X对象中。然后调用的函数是在X对象上调用的,因此调用了X的函数。当您在声明或强制转换中指定C++中的类型时,这意味着声明或强制转换为的对象实际上是该类型,而不是派生类型。如果您只想将对象视为X类型(也就是说,如果您希望表达式的静