Junior
Фоидаи истифодаи фазои номҳои бе ном дар C++ чист?
sobes.tech AI
Ҷавоб аз AI
Номи беҳосилаи номӣ роҳи маҳдуд кардани диданпазирии номҳо (тағйирёбандаҳо, функсияҳо, синфҳо) дар дохили воҳиди тарҷумаи ҳозира (масалан, файл .cpp) мебошад. Ин баробар бо истифодаи калимаи static дар сатҳи глобалӣ дар забони C ва пешгирӣ кардани муноқишаҳои номҳо ҳангоми пайваст кардан.
Афзалиятҳои асосӣ:
- Пешгирии муноқишаҳои номҳо: Номҳое, ки дар боҳосилаи номӣ беҳосила эълон шудаанд, барои воҳидҳои дигар намоён нестанд, ки имконияти муноқишаҳоро бартараф мекунад.
- Диданпазирии маҳаллӣ: Имкон медиҳад, ки равшан нишон диҳад, ки унсури муайян танҳо барои истифодаи дохилии дар ин файл пешбинӣ шудааст.
- Альтернатива ба
static: Дар C++, боҳосилаи номӣ беҳосила роҳи афзалтар барои таъмини пайвастагии дохилӣ дар муқоиса боstaticбарои тағйирёбандаҳо ва функсияҳои глобалӣ мебошад. - Ташкили беҳтаршудаи коди: Ниятҳои таҳиягарро равшантар мекунад – ки баъзе мавҷудиятҳо хусусӣ барои файл мебошанд.
Масалан:
// file1.cpp
namespace
{
int internal_counter = 0; // Танҳо дар file1.cpp диданпазир
void internal_increment() // Танҳо дар file1.cpp диданпазир
{
internal_counter++;
}
}
void public_function()
{
internal_increment(); // Мумкин аст аз public_function дар file1.cpp даъват шавад
}
// file2.cpp (дар файли дигар)
// Манъ аст, ки мустақиман ба internal_counter ё internal_increment дастрасӣ пайдо кард
// Хатои компилятсия: 'internal_counter' дар ин ҳудуд эълон нашудааст
// Хатои компилятсия: 'internal_increment' дар ин ҳудуд эълон нашудааст
// int value = internal_counter;
// internal_increment();
// Аммо, мумкин аст, ки public_function-ро даъват кард, агар он дар файли сарлавҳа эълон шуда бошад ва дастрас бошад
extern void public_function();
void another_function()
{
public_function();
}