Что такое определения, декларации и назначения С++?
Я имею тенденцию использовать слова define, declare и assign interchangeable, но это, кажется, вызывает обиду для некоторых людей. Это оправдано? Должен ли я использовать слово declare в первый раз, когда я назначаю переменную? Или это еще не так?
Ответы
Ответ 1
Определить и объявить аналогичны, но назначение очень отличается.
Здесь я объявляю (или определяю) переменную:
int x;
Здесь я присваиваю значение этой переменной:
x = 0;
Здесь я делаю оба в одном утверждении:
int x = 0;
Примечание
Не все объявления поддержки и назначения поддержки в одном выражении:
T-SQL
declare x int;
set x = 0;
Некоторые языки требуют, чтобы вы присваивали значение переменной при объявлении. Это требование позволяет компилятору или интерпретатору языка выводить тип переменной:
Python
x = 0
Ответ 2
Определение - это описание значения или функции, то есть компилятору или программисту сообщается точно, что это такое, например
int foo()
{
return 1;
}
int var; // or, e.g. int var = 5; but this is clearer.
Объявление сообщает компилятору или программисту, что функция или переменная существует. например.
int foo();
extern int var;
Назначение - это когда переменная имеет свое значение, обычно с оператором =. например.
a = b;
a = foo();
Ответ 3
Важно использовать правильную терминологию, иначе люди не будут знать, о чем вы говорите, или неправильно предполагаете, что не знаете, о чем говорите.
Ответ 4
Эти термины часто имеют точные значения в стандартах для разных языков. Если это так, их не следует путать.
В c, например:
-
функция может быть определена только один раз (когда вы говорите, что она делает), но она также может быть объявлена до этого (когда вы говорите, какие аргументы она принимает и какой тип она возвращает).
-
Аналогично переменная объявляется, когда вы говорите, какой тип она есть, и это происходит только один раз для каждой области. Но вы можете назначить значение повторно. (Некоторые языки также различают инициализацию (дающую переменную значение во время объявления) и назначение (изменение значения позже).
Ответ 5
Различия могут казаться утонченными, но они важны. Не каждый язык делает те же различия, но в С++ объявление делает тип и имя переменной, известной компилятору
int i;
A определение переменной выделяет хранилище и задает начальное значение для переменной.
i = 1;
Вы можете объединить объявление переменной и определение в один оператор, как это обычно делается.
int x = 1;
Объявление переменной внутри функции также освобождает память для переменной, поэтому следующий код неявно определяет переменную a
как часть ее объявления.
int main()
{
int a;
return 0;
}
Так как переменная a
автоматически определяется компилятором, она будет содержать любое значение в ячейке памяти, которая была выделена для него. Вот почему небезопасно использовать автоматические переменные, пока вы явно не присвоили им известное значение.
Назначение выполняется при каждом изменении значения переменной в вашей программе.
x = 2;
x++;
x += 4;
Объявление функции, аналогичное объявлению переменной, делает подпись функции известной компилятору. Это позволяет вам вызывать функцию в исходном коде до ее определения, не вызывая ошибки компилятора.
int doSomething(float x);
Определение функции указывает тип возвращаемого значения, имя, список параметров и инструкции для функции. Первые три из этих элементов должны соответствовать объявлению функции. Функция должна быть определена только один раз в заданной программе.
int doSomething(float x)
{
if( x < 0 )
{
x = -x;
}
return static_cast<int>(x);
}
Вы можете объединить функцию decalartion и definition в одну, но вы должны сделать это, прежде чем функция будет вызвана в любом месте вашей программы.
Ответ 6
Определение, декларация и присвоение имеют два случая:
- для переменных.
- для функций.
Для Переменная:
- Определение:
Чтобы сообщить компилятору зарезервировать память для переменной.
int x;
- Замедление:
Чтобы сообщить компилятору, что переменная определена в другом месте.
extern int x;
- Назначение:
Чтобы сообщить компилятору поместить значение в переменную.
x = 0;
Для Функции:
- Определение:
int functionDef(int x){
int x;
...
...
...
return x;
}
- Замедление:
Это просто прототип функции.
int functionDef(int x);
Ответ 7
Правильный ответ зависит от того, на каком языке вы говорите. Компьютерные языки часто имеют определенную терминологию либо из-за спецификации языка, либо из сообщества, выросшего вокруг языка. COBOL, когда я его использовал, имел совершенно другую терминологию, чем другие основные языки (в смысле языков, которые ближе к основному развитию языка, а не к основному бизнесу). Форт разработал какую-то странную терминологию.
Если вы знаете английский, вы обычно можете получить представление о том, что означает слово из его нормального значения, но никогда не рассчитывайте на это слишком много. То же самое происходит с конкретными словами между языками или языковыми сообществами.
Ответ 8
Это может зависеть от языка, как было сказано. Я думаю, что это действительно зависит от того, используются ли слова для таких вещей, как классы. Для большинства типов данных, обсуждаемых здесь, вопрос может не иметь большого значения. В С++ (см. С++ - в чем разница между определением и объявлением?), класс или структура всегда имеют точно одно определение, но могут быть объявлены ноль или более раз, Класс не может быть объявлен без определения. Таким образом, "объявленный" может быть синонимом "используется".
В большинстве языков простые типы, такие как целые, не нуждаются в определениях так, как это делают классы.