静态 int 和 int 在 C++ 类中的区别
The difference between static int and just int in a class in C++
可能的重复:
静态int a和int a有什么区别?
我试图用简单的英语得到一个简单的解释。 我试图阅读和研究static int
和只是int
之间的区别,但无论我读到什么,似乎都让我更加困惑。 假设我在下面有一个这样的课程
class B{
static int i;
int i;
...
}
用简单的英语来说,两者有什么区别?想象一下,你正在向一个非程序员解释。 有人在这里问了类似的问题,但我并不满意。
这里有一个比喻给你。
假设一个拥有银行账户的组织。就C++而言,该组织是您的class
.想象一下,该组织有代表(工作人员,如果你愿意的话)。就C++而言,它们是该类的实例(或变量)。
现在,每个代表都可以拥有自己的银行账户,只有他自己才能使用。没有其他人可以使用它。那将是一个正常的int
.
但是,每个工作人员也可以使用组织的银行帐户,该帐户由他们所有人共享,并且不属于他们中的任何一个。那是你的static int
.
现在,再次回到技术术语,以防您需要它。我会尽量清晰简洁。
-
正常
int
:类类型的每个变量都有自己的个人变量。所以在你的例子中,如果你做 10 个类型
B
的变量,每个变量里面都有自己的int i
变量。 -
static int
:静态变量由类的所有变量共享。静态变量不属于任何类变量,它属于类本身。因此,如果您要创建 10 个类型
B
的变量,每个变量都将能够访问static int i
,但他们都无法拥有它(它是共享的)。
类中的静态意味着对象的所有实例:B a,b,c,d;
具有完全相同的成员i。a.i++
;更改b.i
、c.i
等的内容。
静态在类内部和类外部的区别在于使静态变量仅对类可见或通过类可见。当然,变量不是存储在类中,而是存储在其他地方。此语法仅允许将变量的范围定义为此特定类。
当然,非静态成员对于每个实例都是唯一的。
如果你声明了 B 的多个对象,那么每个对象都有自己的 int i 副本。 但是,所有对象只有一个静态 int i。
B::i //This will refer to the static i
//As you can see this is accessed through the class name
B obj, obj2;
obj.i //This will refer to the obj member i
obj2.i // and will be different from this which is obj2 member i
为了避免混淆重复名称,请想象以下内容:
class foo
{
public:
int i;
static int j;
};
static int j;
定义了与类foo
关联的单个变量,称为j
。无论您创建多少个foo
类型的对象,都只有一个j
。在这种情况下,类foo
之外的任何内容都可以使用语法foo::j
访问j
。
与i
的定义形成对比, 是类型foo
对象的成员。 为每个类型为foo
的对象创建了一个唯一的i
。 例如。
foo myObject;
foo myOtherObject;
myObject.i = 42; myOtherObject.i = 180;
- int(c) 和 c-'0' 之间的区别。C++
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- 在 C 和 C++ 中作为函数参数,int **a 和 int a[][] 之间有什么确切的区别
- 在 C/C++ 中将数组作为形式参数作为 int arr[] 和 int arr[N] 传递的区别
- int x_ 和 int x 在C++中有什么区别
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- int (%d) 和 %.0lf 之间有什么区别?
- 打印一个带有静态 int 的函数,有一个 std::cout 和多个 std::cout 有什么区别?
- 有什么区别 - 常量 int x = 5000;和常量整数 x = 50'00;在C++?
- 杀死幻数:"const int" vs "constexpr int"(或者最后没有区别)
- uniform_int_distribution <>和 <int>有什么区别?
- “int*[1]”和“int(*)[1]”有什么区别
- std::vector<int> 和 std::vector* 有什么区别<int>?
- "auto x = vector<int>()"和"vector<int> x"有什么区别?
- int '*p = new int (5);' 和 'int *p = new int[5];' 有什么区别?
- C++ 中的 "int a, b =0" 和 "int a =0; int b = 0" 有什么区别?
- const int const&和const int&in C++有什么区别?
- "long int a=2"和"int a=2L"有什么区别?
- "long"和"long int"以及"long long"与"long long int"有什么区别