标签: static-variables

在C中初始化静态变量

可能重复:
C中静态变量的初始化

我知道全局变量或静态在C中自动初始化为零.但是,我不确定是否只有一个或者只有一个被初始化.请注意,我不是在讨论函数中定义的变量,而是在.c文件中全局讨论变量.

那么以下哪个变量会自动初始化为零?

static struct mystruct var1;
struct mystruct var2;
static struct { int x; int y; } var3;
Run Code Online (Sandbox Code Playgroud)

c initialization global-variables static-variables

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

C++静态成员初始化与编译器链接混淆.怎么解决?

我在使用这些静态成员初始化c ++类时遇到了麻烦.有关详细信息,请参阅我的代码

资源

header.h

#ifndef HEADER_H
#define HEADER_H
#include <string>
using namespace std;
class Staff{ public: static string str;};
class Boss{ public: static string str;};
#endif
Run Code Online (Sandbox Code Playgroud)

staff.cpp

#include "header.h"
string Staff::str = "(staff)";
Run Code Online (Sandbox Code Playgroud)

boss.cpp

#include "header.h"
string Boss::str = "I call " + Staff::str;
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include <iostream>
#include "header.h"
int main(){cout << Boss::str << endl;}
Run Code Online (Sandbox Code Playgroud)

这里有许多编译代码,结果不同:

预编译:

g++ -c boss.cpp
g++ -c staff.cpp
ar rcs lib.a boss.o staff.o
ar rcs rlib.a staff.o boss.o
Run Code Online (Sandbox Code Playgroud)

编译,运行和结果:

g++ main.cpp staff.cpp boss.cpp ; ./a.out …
Run Code Online (Sandbox Code Playgroud)

c++ static-variables static-libraries segmentation-fault static-initialization

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

静态变量cpp不想改变

FileA.hpp:

static int a; 
void change(int);

FileA.cpp

#include "FileA.hpp"
void change(int x) { a = x; }

main.cpp

#include "FileA.hpp"
#include <cstdlib>
#include <iostream>

int main()
{
    a = 5;
    std::cout<<a<<std::endl;
    change(10);
    std::cout<<a<<std::endl;
    a = 20;
    std::cout<<a<<std::endl;

    system("Pause");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的输出是:

5
5
20
Run Code Online (Sandbox Code Playgroud)

有人可以帮我弄这个吗?为什么变量'a'不想改变FileA.cpp中的函数.如何解决这个问题.当我在"FileA.hpp"中内联更改(int x)时,它工作正常.

c++ static-variables

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

c ++,错误:使用qualified-name无效

#include<iostream>
using namespace std;

class sample {
    public:
        static int x;
};

//int sample::x = 20;

int main() {
    sample s1;
    int sample::x = 30;
}
Run Code Online (Sandbox Code Playgroud)

当我编译这个程序然后得到一个错误无效使用限定名称'sample :: x'

我知道我收到此错误是因为这个语句是int sample :: x = 30; 在主要.

但我不明白为什么我不能定义 int sample :: x = 30; 在主?

c++ class static-variables static-members

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

这是初始化静态变量的有效方法吗?

我有一个大常量文件.这是初始化它们的有效方法吗?

private static int i = 0;

public static final int ITEM_GOLD = i++;
public static final int ITEM_ZINC = i++;
public static final int ITEM_TIN = i++;
....
Run Code Online (Sandbox Code Playgroud)

ITEM_GOLD应该相等0,ITEM_ZINC应该相等1,ITEM_TIN应该等于2等等.

java static-variables

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

如何在另一个类中设置静态变量?

我想在Coeffs.cpp中设置一个静态变量:

#include "Coeffs.h"
class Coeffs
{
    public:
    double Coeffs::alpha5b = 0.0;
};
Run Code Online (Sandbox Code Playgroud)

用头文件

#ifndef COEFFS_H
#define GOEFFS_H
class Coeffs
{
    public:
    static double alpha5b;
};
#endif
Run Code Online (Sandbox Code Playgroud)

使用以下代码:

#include <iostream>
#include <fstream>
#include <string>
#include "json/json.h"
#include "Coeffs.h"

using namespace std;

int main()
{
    cout << "start" << endl;

    string json;
    ifstream inputStream;
    inputStream.open("coeffTest.json");
    inputStream >> json;

    Json::Value root;
    Json::Reader reader;
    bool parseSuccess = reader.parse(json, root);
    if(!parseSuccess)
    {
        cout << "failed" << endl;
    }
    else
    {
        Coeffs::alpha5b = 1.1;
        //Coeffs::alpha5b = …
Run Code Online (Sandbox Code Playgroud)

c++ static-variables

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

多线程中声明期间的静态变量初始化

我想将以下代码添加到我的班级中:

static private final ILogic_P logicInstanceI =
    (ILogic_P)Factory.CreateAnon("some.path.ILogic_P" + (SomeClass.isIMDB() ? "1" : "2"));

public static ILogic_P getLogicInstanceI(){
    return logicInstanceI;
}
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚静态变量的初始化是否是线程安全的。两个线程是否有可能同时尝试初始化此属性?

java multithreading static-variables

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

静态变量 JavaScript ECMA6

我有一个遵循 ECMA6 标准的 JavaScript 类,我想在其中创建一个静态变量

为此,我阅读了以下文档:

第一个链接演示了如何在 ECMA 6 中的类中创建静态方法,而第二个链接演示如何使用原型和函数来实现在 ECMA6 之前创建静态变量。

这些都不是我想要的。我正在寻找这样的东西:

class AutoMobile {

    constructor(name, license) {
        //class variables (public)
        this.name = name;
        this.license = license;
    }

   //static variable declaration
   static DEFAULT_CAR_NAME = "Bananas-Benz";
}
Run Code Online (Sandbox Code Playgroud)

但是,前面的示例不起作用,因为static关键字仅用于方法。

如何使用 ECMA6 在 JavaScript 的类中创建静态变量?

javascript static-variables ecmascript-6

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

水晶静态变量

Crystal 有静态变量还是我必须使用具有文件/全局作用域的全局变量?

def test(value)
  static var = 1
  var += value
  return var
end

pp test 0 #=> 1
pp test 1 #=> 2
pp test 1 #=> 3
pp test 0 #=> 3
Run Code Online (Sandbox Code Playgroud)

static-variables crystal-lang

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

在创建新实例时,是否会再次声明python中的类变量?

我正在练习以下代码:

class MITPerson(Person): # a subclass of class Person

    nextIdNum = 0 # identification number

    def __init__(self, name):
        Person.__init__(self, name)
        self.idNum = MITPerson.nextIdNum 
        MITPerson.nextIdNum += 1 

    def getIdNum(self):
        return self.idNum
Run Code Online (Sandbox Code Playgroud)

作为参考,这里是超类:

class Person(object):  # superclass

    def __init__(self, name):
        """Create a person"""
        self.name = name
Run Code Online (Sandbox Code Playgroud)

我以为我已经知道了这个问题的答案,因为我尝试了以下实例:

p1 = MITPerson('Mark Guttag')
p2 = MITPerson('Billy Bob Beaver')
p3 = MITPerson('Billy Bob Beaver')
Run Code Online (Sandbox Code Playgroud)

毫不奇怪,当我将它们输入控制台时:

在[12]中:p1.getIdNum()

出[12]:0

在[13]中:p3.getIdNum()

出[13]:2

我已经阅读了这篇文章,并在这里检查了所有优秀答案: Python中的静态类变量

我看到在创建第一个实例p1时,nextIdNum被赋值为0.我觉得奇怪的是,为什么p2和p3还没有将nextIdNum再次绑定到0?在我的想象中,一旦创建了类MITPerson而不调用该方法,就应该将类变量重新赋值为0.

我错过了什么?

顺便说一句,我也在这里阅读教程:https: //docs.python.org/3.6/tutorial/classes.html#class-objects

但是,我担心它没有给出答案:(

python class static-variables

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