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:
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:
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:
Se você comentar o código int cc = Demo::mul(a, b), então o programa será executado da seguinte forma:
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--