Прием хранимой процедуры - то, что можно назвать их от оператора INSERT. Я нашел это очень полезным, когда я работал над базой данных SQL Server.
CREATE TABLE #toto (v1 int, v2 int, v3 char(4), status char(6))
INSERT #toto (v1, v2, v3, status) EXEC dbo.sp_fulubulu(sp_param1)
SELECT * FROM #toto
DROP TABLE #toto
Взять их из право. Тот, который находится перед ;
, сообщает клиенту, что это константа уровня дизайна, то есть она не изменяет состояние объекта. (Думайте об этом как о методе только для чтения.)
Хорошо, теперь возвращаемое значение:
const char const *const
Это постоянный указатель на все в порядке ... вот и бум! У вас лишняя const
- синтаксическая ошибка. Следующие значения эквивалентны: const T
или T const
. Если вы извлечете const
, вы получите постоянный указатель на постоянные символы. Это поможет?
Хорошо, теперь возвращаемое значение:
const char const *const
Это постоянный указатель на все в порядке ... вот и бум! У вас лишняя const
- синтаксическая ошибка. Следующие значения эквивалентны: const T
или T const
. Если вы извлечете const
, вы получите постоянный указатель на постоянные символы. Это поможет?
Хорошо, теперь возвращаемое значение:
const char const *const
Это постоянный указатель на все в порядке ... вот и бум! У вас лишняя const
- синтаксическая ошибка. Следующие значения эквивалентны: const T
или T const
. Если вы извлечете const
, вы получите постоянный указатель на постоянные символы. Это поможет?
У вас есть на одну константу больше, чем синтаксически разрешено, этот код не будет компилироваться. Удалите «const» после «char» и перед «*». Кроме того, последняя константа должна стоять перед телом функции. Это помогает читать такие вещи справа налево.
const char * const GetName() const { return m_name; };
У вас есть константная функция (т. Е. Функция не изменяет состояние класса.), Которая возвращает константный указатель на константный символ.
(1) const char (2) const * (3) const GetName () {return m_name; } (4) const;
Как уже упоминалось в другом ответе, трюк для «запоминания» его читается справа налево:
Редактировать: Похоже, я неправильно вставил код в Комо, или он был отредактирован в исходном ответе, чтобы быть правильным. В любом случае я сохраняю ответ ниже, как если бы код был неправильным.
Онлайн-компилятор Comeau дает следующие результаты:
«ComeauTest.c», строка 4: error: type квалификатор указан более одного раза
const char const * const GetName () { вернуть m_name; } const; ^"ComeauTest.c", строка 4: предупреждение: введите квалификатор возвращаемого типа бессмысленный const char const * const GetName () {return m_name; } const; ^
"ComeauTest.c", строка 4: ошибка: декларация ничего не декларирует const char const * const GetName () { вернуть m_name; } const;
Это означает, что ваш оператор имеет неверный формат.
const char const * const GetName() { return m_name; } const;
Первая и вторая константы означают одно и то же. Вы не можете указывать один и тот же квалификатор более одного раза, поэтому для компиляции кода необходимо удалить один из них. Обе эти константы указывают, что значения, на которые указывает указатель, возвращаемый GetName, не могут быть изменены, что делает такой код недопустимым:
const char* name = c.GetName();
name[0] = 'a';
Третья константа указывает, что указатель, возвращаемый GetName (), не может быть изменен, но как указывает Comeau out, это ничего не дает с возвращаемым значением, потому что возвращаемое значение является копией указателя, а не самим указателем, и может быть назначено неконстантному указателю.
Четвертая константа неуместна, она должна находиться между GetName и телом функции следующим образом:
const char* GetName() const { return m.name; }
Эта константа указывает, что никакие члены класса не будут изменены во время выполнения GetName. Предполагая, что GetName является членом класса Person, этот код будет разрешен:
const Person& p;
p.GetName();
Без этой константы приведенный выше код завершится ошибкой.
const (1) char const (2) * const GetName () {return m_name; } const (3);
const char * const result = aaa.GetNAme ();
3 - метод const, не разрешено изменять члены или вызывать какие-либо неконстантные методы.
1 - не позволяет изменить внутри указателя, т.е. * result = ..
2 - не позволяет перемещать указатель, т.е. result = NULL
Дано:
const char const * const GetName() const { return m_name; };
Первая и вторая константы эквивалентны, но разрешен только один из них, то есть вы можете поместить const
до или после типа ( char
в данном случае), но только один или другой, а не оба. Либо, однако, говорит, что символы, на которые указывает указатель, не могут быть записаны.
const
после '*' означает, что указатель, возвращаемый функцией, не может быть изменен сам. Это редко встречается в возвращаемом типе - вы возвращаете значение, которое ни в коем случае не может быть изменено (обычно оно просто присваивается некоторой переменной). Однако это может иметь смысл в других контекстах.
Третья const
разрешена только для функции члена . Он говорит, что когда эта функция вызывается, полученный указатель this
будет T const * const
, а не T * const
, поэтому функция-член может изменять только static
] или изменяемые
члены объекта, и если он вызывает другие функции-члены, они также должны быть const
. Однако есть предостережение, что он также может отказаться от константности, и в этом случае он может изменить то, что считает нужным (с дополнительным предостережением, что если объект был изначально определен как const
, вместо того, чтобы просто иметь указатель const
на нормальный (неконстантный) объект, результаты будут неопределенными).
static
или изменяемые
члены объекта, и если она вызывает другие функции-члены, они также должны быть const
. Однако есть предостережение, что он также может отказаться от константности, и в этом случае он может изменить то, что считает нужным (с дополнительным предостережением, что если объект был изначально определен как const
, вместо того, чтобы просто иметь указатель const
на нормальный (неконстантный) объект, результаты будут неопределенными). поэтому функция-член может изменять только static
или изменяемые
члены объекта, и если она вызывает другие функции-члены, они также должны быть const
. Однако есть предостережение, что он также может отказаться от константности, и в этом случае он может изменить то, что считает нужным (с дополнительным предостережением, что если объект был изначально определен как const
, вместо того, чтобы просто иметь указатель const
на нормальный (неконстантный) объект, результаты будут неопределенными). last const:
одну после последней const:
second const:
Первое:
Итак, чтобы завершить: Функция возвращает постоянный указатель (всегда одно и то же местоположение) на постоянный символ (всегда одно и то же содержимое), и функция не изменяет состояние класса.