2015-09-25 4 views
0

Это относится к C++. Этот вопрос у меня уходит около 6 месяцев, когда я имел обыкновение думать, что декларация:Объявление, определение, назначение, инициализация переменных

int a; 

И это определение было:

a = 5; 

Кроме того, что:

int a = 5; 

было как декларацией, так и определением.

Я теперь пришел, чтобы понять, что:

int a; 

Является ли это определение, а не просто декларация. (Я не знаю почему).

Кроме того, существуют такие термины, как назначение и инициализация, которые добавляют дополнительный жаргон к проблеме.

Так вот мое текущее понимание (и, пожалуйста, исправить что-нибудь):

int a; // Declaration and definition 

int a = 5 // Declaration, definition, assignation and initialisation. 

a = 5; // Initialising (if for the first time), 
      // assigning (if for subsequent times), 
      // defining (not sure about this one). 

Я читал немного на эту тему, но я до сих пор путают. Может кто-нибудь объяснить, что именно такое? Я знаю, что в таких случаях существуют философские споры, такие как нуль, четное число или даже число. Ха-ха, но может кто-нибудь попробовать? Благодарю.

+0

«инициализировать» означает, что вы предоставите начальное значение (особый случай, когда вы явно предоставить пустой список, который по-прежнему считается инициализацией). –

ответ

0

A определение - это объявление в некотором specific circumstance. (т. е. объявление с инициализатором). Это связано с тем, что они должны соответствовать правилу определения One. Все определения являются декларациями, но не наоборот.

Инициализация дает начальное значение переменной в ее определении. Инициализация также будет происходить и в другой ситуации (например, при прохождении аргумента функции)

Назначение используется для присвоения нового значения уже существующему объекту.

В вашем конкретном случае

int a; // definition, default-initialization if it's local, zero-initialization otherwise 
int a = 5; // definition, copy-initiaization 
a = 5; // assignment 

Кроме того, следующее заявление, но не определение

extern int i; // declaration but not definition 
+0

Почему этот старый вопрос появляется в активных вопросах? Я не тот, кто его выкапывает. – Carousel

+0

Я задавал этот возраст, когда учился. Значения кажутся довольно произвольными и зависят от стандарта, который я думаю. Например, является ли int объявленным в классе определением? Я не думаю, что это просто объявление. Но вне класса в глобальном пространстве это так. – Zebrafish

Смежные вопросы