可能重复:
C中静态变量的初始化
我知道全局变量或静态在C中自动初始化为零.但是,我不确定是否只有一个或者只有一个被初始化.请注意,我不是在讨论函数中定义的变量,而是在.c文件中全局讨论变量.
那么以下哪个变量会自动初始化为零?
static struct mystruct var1;
struct mystruct var2;
static struct { int x; int y; } var3;
Run Code Online (Sandbox Code Playgroud) 我在使用这些静态成员初始化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
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)时,它工作正常.
#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; 在主?
我有一个大常量文件.这是初始化它们的有效方法吗?
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等等.
我想在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) 我想将以下代码添加到我的班级中:
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)
我无法弄清楚静态变量的初始化是否是线程安全的。两个线程是否有可能同时尝试初始化此属性?
我有一个遵循 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 的类中创建静态变量?
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) 我正在练习以下代码:
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
但是,我担心它没有给出答案:(
static-variables ×10
c++ ×4
class ×2
java ×2
c ×1
crystal-lang ×1
ecmascript-6 ×1
javascript ×1
python ×1