标签: static-variables

主程序和共享库在__static_initialization_and_destruction_0中初始化相同的静态变量

有谁知道为什么在dlopen()中初始化的库会初始化主程序拥有的静态变量.主程序和共享库都有静态变量的副本,但由于某种原因,共享库重新初始化主程序的静态变量副本并对其进行破坏,在主程序试图破坏它时导致段错误.

这是在符号表中出现错误名称的情况吗?

symbols shared-libraries static-variables segmentation-fault dlopen

8
推荐指数
1
解决办法
4928
查看次数

静态方法中的静态变量在基类和继承中

我有这些C++类:

class Base
{
protected:
    static int method()
    {
        static int x = 0;
        return x++;
    }
};

class A : public Base
{

};

class B : public Base
{

};
Run Code Online (Sandbox Code Playgroud)

x静态变量之间共享AB,或将他们中的每一个都有它自己的独立x变量(这是我想要什么)?

c++ inheritance static-methods static-variables

8
推荐指数
1
解决办法
3389
查看次数

静态函数可以在php中访问非静态变量吗?

<?php
    class Stat
    {
        public $var1='H';
        public static $staticVar = 'Static var';


        static function check()
        {

            echo $this->var1;               
            echo "<br />".self::$staticVar ."<br />";
            self::$staticVar = 'Changed Static';
            echo self::$staticVar."<br />";
        }
        function check2()
        {
            Stat::check();
            echo $this->var1;           
            echo "b";
        }
    }

?>
Run Code Online (Sandbox Code Playgroud)

我可以像这样使用它吗?

$a = new Stat();
$a->check2();
Run Code Online (Sandbox Code Playgroud)

php static-variables

8
推荐指数
2
解决办法
1万
查看次数

我是否可以为每种不同类型的继承类使用静态变量的不同副本

我希望具有相同的静态变量,具有不同的值,具体取决于类的类型.

所以我会的

public class Entity
{
     public static Bitmap sprite;

     public void draw(Canvas canvas, int x, int y)
     {
          canvas.drawBitmap(sprite, x, y, null);
     }
}

public class Marine extends Entity
{

}

public class Genestealer extends Entity
{

}
Run Code Online (Sandbox Code Playgroud)

然后在我的主程序中去:

Marine.sprite = // Load sprite for all instances of Marine
Genestealer.sprite = // Load sprite for all instances of Genestealer
Run Code Online (Sandbox Code Playgroud)

我不想在类的每个实例中存储相同的sprite.我希望每种类型都有一个.我想继承静态精灵变量和绘制精灵的绘制函数.但我不希望Genstealer精灵覆盖海洋精灵.

这可能吗?

我该怎么办?

java inheritance static-variables

7
推荐指数
1
解决办法
3385
查看次数

使一个超类有一个静态变量,它对于c#中的每个子类都是不同的

在子类中没有任何代码的情况下,我希望抽象类为每个子类提供不同的静态变量副本.在C#中

abstract class ClassA
{
    static string theValue;

    // just to demonstrate
    public string GetValue()
    {
        return theValue;
    }
    ...
}
class ClassB : ClassA { }
class ClassC : ClassA { }
Run Code Online (Sandbox Code Playgroud)

和(例如):

(new ClassB()).GetValue(); // returns "Banana"
(new ClassC()).GetValue(); // returns "Coconut"
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案是:

abstract class ClassA
{
    static Dictionary<Type, string> theValue;
    public string GetValue()
    {
        return theValue[this.GetType()];
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

虽然这很好用,但我想知道是否有更优雅或内置的方式来做到这一点?

这类似于我可以为每个不同类型的继承类拥有静态变量的不同副本,但我无法控制子类

c# inheritance static-variables

7
推荐指数
2
解决办法
7619
查看次数

静态const和constexpr变量有什么区别?

我知道constexpr 变量可以在编译时使用.例如,对于模板或静态asser.

但如果我想在没有constexpr的情况下这样做,我可以static const.

什么是自C++ 11/14引入constexpr之间的区别

constexpr int a = 3;
//AND
static const int a = 3;
Run Code Online (Sandbox Code Playgroud)

谢谢!

另一种看待这个问题的方法是我应该使用哪种方法?

c++ static-variables constexpr c++11

7
推荐指数
1
解决办法
1217
查看次数

静态变量声明(C)

以下两个static变量声明是否相同?

1.

    static int var1;
    static int var2;
    static int var3;
Run Code Online (Sandbox Code Playgroud)

2.

    static int var1, var2, var3;
Run Code Online (Sandbox Code Playgroud)

更具体地说,在案例2中,所有变量都是static,或者只是var1

c declaration static-variables language-lawyer

7
推荐指数
2
解决办法
873
查看次数

从一个文件访问静态变量到另一个文件

我最近遇到的问题是如何访问一个在file1.c中声明为static的变量到另一个file2.c?

是否可以访问静态变量?

我对C中静态关键字的理解是,

static是"内部链接",因此只能从一个编译单元访问它们 - 它们被定义的单元.使用内部链接声明的对象是单个模块的私有对象.

正如我的一位朋友建议我解决方案.

file1.c

   #include <stdio.h>

   int main()
   {
          int b=foo();
          printf("%d",b);
          return 0;
   }
Run Code Online (Sandbox Code Playgroud)

file2.c

   static int a=25;

   int foo()
   {
        return a;
   }
Run Code Online (Sandbox Code Playgroud)

汇编 gcc file1.c file2.c -o file

如果我在上面,我可以访问变量.

所以我的问题是:

  1. 上述程序是否违反静态变量规则?

  2. 如果没有,为什么会这样,除了包括file(#include <…>)之外,还有其他方法可以访问静态变量.

    我怎么能从另一个文件访问静态变量?

    在C中,如何将全局变量的范围限制为声明它的文件?

  3. 如果我对静态变量概念有误,并且有更好的解决方案可用于访问静态变量,请纠正我?

c static static-variables internal-link

7
推荐指数
2
解决办法
1万
查看次数

当我们声明静态变量时,编译器实际上做了什么?

我想知道实际情况是什么,编译器如何处理静态变量.与自动变量不同,静态变量的值即使在块结束后仍然存在,但编译器实际上如何处理这个?

c static-variables

7
推荐指数
2
解决办法
2212
查看次数

是否在函数体中静态定义了互斥锁,能够正确锁定?

是否在函数体中静态定义了互斥锁,能够正确锁定?我目前在我的记录器系统中使用这种模式,但我还没有测试它的线程安全性.

void foo () {
    static std::mutex mu;
    std::lock_guard<std::mutex> guard(mu);
    ...
}
Run Code Online (Sandbox Code Playgroud)

c++ multithreading mutex static-variables thread-safety

7
推荐指数
2
解决办法
150
查看次数