У чому різниця між static constі const? Наприклад:
static const int a=5;
const int i=5;
Чи є якась різниця між ними? Коли б ви використовували одне над іншим?
У чому різниця між static constі const? Наприклад:
static const int a=5;
const int i=5;
Чи є якась різниця між ними? Коли б ви використовували одне над іншим?
Відповіді:
Різниця полягає у зв’язку.
// At file scope
static const int a=5; // internal linkage
const int i=5; // external linkage
Якщо iоб'єкт не використовується поза блоком перекладу, де він визначений, вам слід оголосити його за допомогою staticспецифікатора.
Це дозволяє компілятору (потенційно) виконувати подальшу оптимізацію та повідомляє читачеві, що об'єкт не використовується поза його блоком перекладу.
const int i = 5;має зовнішній зв'язок ?? У C ++ це не ...
constне має нічого спільного з C ++ const.
staticвизначає видимість поза функцією або тривалістю життя змінних всередині. Отже, це не має нічого спільного constяк таке.
const означає, що ви не змінюєте значення після його ініціалізації.
static усередині функції означає, що змінна буде існувати до і після закінчення функції.
staticза межами функції означає, що область позначеного символу staticобмежена цим файлом .c і не може бути видно за його межами.
Технічно (якщо ви хочете це переглянути), staticце специфікатор сховища та constє кваліфікатором типу.
const int i = 5;
значення, яке ви можете змінити, використовуючи покажчик, якщо i визначено та оголошено локально, якщо це статичний const int a = 5; або const int i = 5; глобально, ви не можете змінити, оскільки він зберігається в пам’яті RO в сегменті даних.
#include <stdio.h>
//const int a=10; /* can not modify */
int main(void) {
// your code goes here
//static const int const a=10; /* can not modify */
const int a=10;
int *const ptr=&a;
*ptr=18;
printf("The val a is %d",a);
return 0;
}
Це залежить від того, чи є ці визначення всередині функції чи ні. Відповідь на випадок поза функцією дається ouah, вище. Всередині функції ефект відрізняється, проілюстровано на прикладі нижче:
#include <stdlib.h>
void my_function() {
const int foo = rand(); // Perfectly OK!
static const int bar = rand(); // Compile time error.
}
Якщо ви хочете, щоб локальна змінна була "дійсно постійною", вам потрібно визначити її не просто "const", а "static const".
fooколи змінна повторно ініціалізується кожен раз, коли my_function()викликається, в результаті чого призначається інше випадкове значення. У випадку, barколи змінна ініціалізується лише один раз, my_function()викликається перший раз, в результаті чого одне і те ж значення призначається протягом усього терміну дії програми. Звідси статична тривалість зберігання.
barоскільки rand()не є константою часу компіляції.