Resumo de palavras-chave estáticas para aprendizagem de C++

A estática pode ser vista em toda parte na programação C++, mas seu uso real não foi resumido, portanto, alguns problemas ocorrem frequentemente durante o uso. A seguir está um resumo de vários usos da palavra-chave estática na programação C++, como segue.

1. Quando uma variável com a palavra-chave estática é definida dentro de uma função, a variável é salva na área de armazenamento estático e inicializada quando o programa é compilado. Se o valor inicial não for fornecido, ele será definido como 0 por padrão. Cada vez que a função é chamada, a variável estática retém o valor da última chamada de função.

Escreva o seguinte programa para teste:

#include<ostream>
#include"demo.h"
#include <iostream>

using namespace Demo;
int func() {
    
    
	static int tmpval ;
	tmpval += 1;
	return tmpval;
}

int main()
{
    
    
	for (int i = 0; i < 5; i++)
	{
    
    
		int val = func();
		printf("第%d调用后,tmpval的值为%d\n", i + 1, val);
	}
	return 0;
}

Os resultados do teste são os seguintes:
Insira a descrição da imagem aqui
Depois que tmpval é inicialmente inicializado, o compilador atribuirá a ele um valor 0. No final da primeira execução do programa, o resultado se torna 1, então o resultado de saída é 1. Cada entrada subsequente é a última saída.

2. Defina uma variável global com a palavra-chave estática no código. A variável global só pode funcionar no arquivo atual e não pode ser referenciada em outros arquivos.

Escreva o programa de teste da seguinte forma:

//demo.h文件
#pragma once
namespace Demo {
    
    
static int iStaticVal = 10;
int add(int x, int y);
}

//demo.cpp文件
#include"demo.h"
namespace Demo {
    
    
int add(int x, int y) {
    
    
	int sum = x + y;
	iStaticVal = iStaticVal + sum;
	printf("静态变量iStaticVal=%d\n", iStaticVal);
	return sum;
}
}

//测试文件main.cpp
#include<ostream>
#include"demo.h"
#include <iostream>
using namespace Demo;
int main()
{
    
    
	int a = 10, b = 20;
	for (int i = 0; i < 5; i++)
	{
    
    
		int res = Demo::add(a, b);
		printf("外部直接打印iStaticVal的结果为:%d\n", Demo::iStaticVal);
		Demo::iStaticVal += 1;
		printf("外部调用iStaticVal后的结果为:%d\n", Demo::iStaticVal);
	}
	return 0;
}

Os resultados do teste são os seguintes:
Insira a descrição da imagem aqui

Pode-se perceber pelos resultados que:

  • Para variáveis ​​globais com a palavra-chave estática,o âmbito de chamada dentro do ficheiro é limitado ao interior do ficheiro.Quando o ficheiro está fora do ficheiro,ainda é inicializado com o valor inicial 10.
  • Quando chamado em arquivos diferentes, o valor muda apenas em arquivos diferentes, portanto, alterações síncronas não podem ser obtidas em arquivos diferentes.

3. Adicione static antes da definição da função, então a função só poderá ser chamada no arquivo de programa de origem e não poderá ser chamada em outros arquivos de programa de origem.

//demo.h文件
#pragma once
static int iStaticVal = 10;
namespace Demo {
    
    
int add(int x, int y);
static int mul(int a, int b);
}

//demo.cpp文件
#include"demo.h"
namespace Demo {
    
    
int add(int x, int y) {
    
    
	int sum = x + y;
	iStaticVal = iStaticVal + sum;
	printf("静态变量iStaticVal=%d\n", iStaticVal);
	int res = mul(x, y);
	printf("mul函数内部调用后结果res=%d\n", res);
	return sum;
}

static int mul(int a, int b) {
    
    
	int res = a * b;
	return res;
}
}

//测试文件main.cpp
#include<ostream>
#include"demo.h"
#include <iostream>
using namespace Demo;
int main()
{
    
    
	int a = 10, b = 20;
	for (int i = 0; i < 5; i++)
	{
    
    
		int res = Demo::add(a, b);
		printf("外部直接打印iStaticVal的结果为:%d\n", iStaticVal);
		iStaticVal += 1;
		printf("外部调用iStaticVal后的结果为:%d\n", iStaticVal);
		int cc = Demo::mul(a, b);
	}
	return 0;

}

Execute o código diretamente e encontre o seguinte erro:
Insira a descrição da imagem aqui

Se você comentar o código int cc = Demo::mul(a, b), então o programa será executado da seguinte forma:
Insira a descrição da imagem aqui
Pode-se observar que
a definição da função com estática só pode ser usada dentro do arquivo cpp no ​​qual a função está definida , e não pode ser usado diretamente externamente. Chame a função estática.

O texto acima é um breve resumo sobre estática. Se houver alguma dúvida, corrija-me e poderemos progredir juntos.

--FIM--

Acho que você gosta

Origin blog.csdn.net/caobin_cumt/article/details/131735580
Recomendado
Clasificación