可能重复:
静态变量
如何从C中的另一个文件访问静态变量?由于静态变量具有文件范围,我认为我们无法在文件外访问它.但我仍然觉得可能有一些技巧或方法来做同样的事情.
最近我发现了一个我想在我的 C++ 项目中使用的 C 库。该代码配置了全局变量,并将其输出写入静态指针指向的内存。当我执行我的项目时,我希望运行 2 个 C 程序实例:一个具有配置 A,一个具有配置 B。我不能运行我的程序两次,所以我认为有 2 个选项:
哪一种是最快的解决方案?是否有其他可能性来运行同一 C 源代码的 2 个实例?
谢谢,
最大限度
我正在编写一个XNA引擎,我将所有模型存储在一个List.为了能够在整个引擎中使用它,我已经做了这个,public static List<Model>所以我可以从我开发的任何新类访问它.它当然使获得模型列表真的很容易获得,但这是正确的用法吗?或者我会更好地在方法声明中传递变量?
有没有办法在该类之外声明新的静态变量,即使它没有在类中设置?
// Using this class as a static object.
Class someclass {
// There is no definition for static variables.
}
// This can be initialized
Class classA {
public function __construct() {
// Some codes goes here
}
}
/* Declaration */
// Notice that there is no static declaration for $classA in someclass
$class = 'classA'
someclass::$$class = new $class();
Run Code Online (Sandbox Code Playgroud)
如何做呢?
谢谢您的建议。
我正在使用C/Objective-C开发一个应用程序(请不要使用C++,我已经有了解决方案),我遇到了一个有趣的用例.
因为clang不支持嵌套函数,所以我的原始方法不起作用:
#define CREATE_STATIC_VAR(Type, Name, Dflt) static Type Name; __attribute__((constructor)) void static_ ## Type ## _ ## Name ## _init_var(void) { /* loading code here */ }
Run Code Online (Sandbox Code Playgroud)
这段代码可以用GCC编译好,但由于clang不支持嵌套函数,我得到一个编译错误:
预期';' 在宣言结束时.
所以,我找到了一个适用于Clang函数内部变量的解决方案:
#define CREATE_STATIC_VAR_LOCAL(Type, Name, Dflt) static Type Name; ^{ /* loading code here */ }(); // anonymous block usage
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有办法利用宏连接来为情况选择合适的方法,例如:
#define CREATE_STATIC_VAR_GLOBAL(Type, Name, Dflt) static Type Name; __attribute__((constructor)) void static_ ## Type ## _ ## Name ## _init_var(void) { /* loading code here */ }
#define CREATE_STATIC_VAR_LOCAL(Type, Name, …Run Code Online (Sandbox Code Playgroud) scope global-variables static-variables clang nested-function
我最近从 Java 过渡到 C++,在弄清楚类继承的确切工作原理方面遇到了一些困难。目前,我有班级Weapon和班级Minigun。Minigun继承该类Weapon,这意味着它应该具有定义的方法和变量Weapon。我的问题是,我有一个名为 的私有常量 static int Weapon,rate以及一个返回名为 的整数的公共方法getRate()。getRate()只是返回类中定义的速率变量。当Minigunextends Weapon,并且我在 inside 设置速率时Minigun,该getRate()方法仍然从类返回常量Weapon,即使它是在Minigun类上调用的。我认为它会像Java一样,继承的方法将使用内部修改的变量Minigun。目前我必须做以下事情;
武器.h
#ifndef __WEAPON__
#define __WEAPON__
class Weapon
{
public:
virtual int getRate()
{
return rate;
}
private:
const static int rate = 0;
};
#endif
Run Code Online (Sandbox Code Playgroud)
迷你枪.h
#include "Weapon.h"
#ifndef __WEAPON_MINIGUN__
#define __WEAPON_MINIGUN__
class Minigun: public Weapon
{
public: …Run Code Online (Sandbox Code Playgroud) 在 Python 方法中,我希望有一个局部变量,其值在方法调用之间保持不变。
这个问题展示了如何在函数内声明此类“静态变量”(C++ 术语)。我尝试在实例方法中执行相同的操作,但失败了。
这是一个重现该问题的最小工作示例。您可以将其复制粘贴到解释器中。
class SomeClass(object):
def some_method(self):
if not hasattr(SomeClass.some_method, 'some_static_var'):
SomeClass.some_method.some_static_var = 1 # breaks here
for i in range(3):
print SomeClass.some_method.some_static_var
SomeClass.some_method.some_static_var += 1
if __name__ == '__main__':
some_instance = SomeClass()
some_instance.some_method()
Run Code Online (Sandbox Code Playgroud)
在标有“#在此中断”的行上,我得到:
AttributeError: 'instancemethod' object has no attribute 'some_static_var'
我意识到有一个简单的解决方法,我可以在其中创建 的some_static_var成员变量SomeClass。SomeClass然而,该变量在方法之外确实没有用,所以如果可以的话,我更希望避免它弄乱命名空间。
1)如果我没有弄错,C++标准保证单个翻译单元中的静态变量按其定义顺序初始化.我对以下代码片段感到困惑:
extern int n;
int k = n;
int n = 2;
Run Code Online (Sandbox Code Playgroud)
extern int n;是声明,而不是定义,所以k是之前定义的n,但是GCC,Clang和MSVC都告诉我k == 2全局变量初始化之后.对我来说,目前还不清楚如何k在之后分配2 int k = n;,因为n尚未在该点初始化,其值必须为零.
如果我们将最后一行更改为:
int n = func();
Run Code Online (Sandbox Code Playgroud)
哪里func()是非constexpr,然后k将被指定为零,正如我所期望的那样.那么,在编译时初始化全局变量会改变初始化的顺序吗?
2)这是另一个代码片段:
class Base
{
public:
struct static_constructor
{
static_constructor()
{
i = 1;
}
};
static static_constructor constructor;
static int i;
};
Base::static_constructor Base::constructor;
int Base::i = 2;
Run Code Online (Sandbox Code Playgroud)
当Base::constructor被定义,它的构造函数被调用,并i = 1进行分配.但是Base::i目前还没有定义,所以,请你解释一下此时发生了什么,为什么最后 …
c++ initialization global-variables static-variables static-members
覆盖派生类中的静态字段会导致
错误TS2417:构建:类静态端'typeof TDerived'错误地扩展了基类静态端'typeof TBase'.
这是一个合法的错误案例吗?
class TBase
{
private static s_field = 'something';
public constructor() {}
}
class TDerived extends TBase
{
private static s_field = 'something else'; // commenting this line fixes error
public constructor()
{
super();
}
}
Run Code Online (Sandbox Code Playgroud)
那我该怎么处理静态字段呢?现在唯一的解决方法是将类名添加到每个静态字段名称,这是一个非常难看的解决方案.
private static TBase_s_field = 'something';
...
private static TDerived_s_field = 'something else';
Run Code Online (Sandbox Code Playgroud)
ps使用typescript 2.0.3
我在伴生对象中声明了一个字段,因此它将在伴生对象中的函数中知道。
像这样:
class ProgramStructure {
companion object {
var index = 0
fun inc(){
index++
}
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但是当我调试它时,我看不到“索引”的值。我怎样才能看到价值?
谢谢
static-variables ×10
c++ ×3
c ×2
inheritance ×2
methods ×2
c# ×1
clang ×1
constants ×1
debugging ×1
declaration ×1
kotlin ×1
php ×1
python ×1
scope ×1
static ×1
typescript ×1
wrapper ×1
xna ×1