интервал константы по сравнению с международной константой как параметр функции в C++ и C

Попробуйте использовать TRUNC и TO_DATE вместо

WHERE
    TRUNC(start_ts) = TO_DATE('2016-05-13', 'YYYY-MM-DD')

. Вместо этого вы можете использовать >= и <, чтобы избежать использования функции в столбце start_ts:

WHERE
   start_ts >= TO_DATE('2016-05-13', 'YYYY-MM-DD')
   AND start_ts < TO_DATE('2016-05-14', 'YYYY-MM-DD')
110
задан maf88 30 July 2018 в 03:01
поделиться

8 ответов

const T и T const идентичны. С типами указателей это становится более сложным:

  1. const char* указатель на константу char
  2. char const*, указатель на константу char
  3. char* const, постоянный указатель на (изменяемому) char

, Другими словами, (1) и (2) идентичны. Единственный способ сделать указатель (а не пуант) const состоит в том, чтобы использовать суффикс - const.

Поэтому многие люди предпочитают всегда помещать const в правую сторону типа (стиль “East const”): это делает свое местоположение относительно типа последовательным и легким помнить (это также анекдотическим образом, кажется, облегчает преподавать новичкам).

169
ответ дан Konrad Rudolph 24 November 2019 в 03:06
поделиться

Прием должен считать объявление назад (справа налево):

const int a = 1; // read as "a is an integer which is constant"
int const a = 1; // read as "a is a constant integer"

Оба - то же самое. Поэтому:

a = 2; // Can't do because a is constant

чтение назад обманывает, особенно пригождается, когда Вы имеете дело с более сложными объявлениями, такими как:

const char *s;      // read as "s is a pointer to a char that is constant"
char c;
char *const t = &c; // read as "t is a constant pointer to a char"

*s = 'A'; // Can't do because the char is constant
s++;      // Can do because the pointer isn't constant
*t = 'A'; // Can do because the char isn't constant
t++;      // Can't do because the pointer is constant
326
ответ дан Ates Goral 24 November 2019 в 03:06
поделиться

Нет никакого различия. Они оба объявляют, что "a" целое число, которое не может быть изменено.

место, где различия начинают появляться, - при использовании указателей.

Оба из них:

const int *a
int const *a

объявляют, что "a" указатель на целое число, которое не изменяется. "a" можно присвоить, но "*a" не может.

int * const a

объявляет, что "a" постоянный указатель на целое число. "*a" можно присвоить, но "a" не может.

const int * const a

объявляет, что "a" постоянный указатель на постоянное целое число. Ни "a", ни "*a" нельзя присвоить.

static int one = 1;

int testfunc3 (const int *a)
{
  *a = 1; /* Error */
  a = &one;
  return *a;
}

int testfunc4 (int * const a)
{
  *a = 1;
  a = &one; /* Error */
  return *a;
}

int testfunc5 (const int * const a)
{
  *a = 1;   /* Error */
  a = &one; /* Error */
  return *a;
}
13
ответ дан Andru Luvisi 24 November 2019 в 03:06
поделиться

Prakash корректен, что объявления являются тем же, хотя немного больше объяснения случая указателя могло бы быть в порядке.

"интервал константы* p" является указателем на интервал, который не позволяет интервалу быть измененным через тот указатель. "интервал* константа p" является указателем на интервал, который не может быть изменен для указания на другой интервал

, См. http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.5 .

7
ответ дан Fred Larson 24 November 2019 в 03:06
поделиться

const int идентично int const, как верно со всеми скалярными типами в C. В целом объявление параметра скалярной функции как const не нужно, начиная с семантики вызова по значению C, средней, что любые изменения в переменной локальны для ее функции включения.

5
ответ дан Emerick Rogul 24 November 2019 в 03:06
поделиться

Это не прямой ответ, а связанная подсказка. Для хранения вещей прямо я всегда использую конвекцию, "помещает const на внешнюю сторону", где "внешней стороной" я имею в виду крайне левое или крайнее правое. Тем путем там не является никакой беспорядок - константа относится к самой близкой вещи (или тип или *). Например,



int * const foo = ...; // Pointer cannot change, pointed to value can change
const int * bar = ...; // Pointer can change, pointed to value cannot change
int * baz = ...; // Pointer can change, pointed to value can change
const int * const qux = ...; // Pointer cannot change, pointed to value cannot change
4
ответ дан Pat Notz 24 November 2019 в 03:06
поделиться

Да, они - то же всего для int

и отличающийся для int*

3
ответ дан prakash 24 November 2019 в 03:06
поделиться

Я думаю в этом случае, что они - то же, но вот пример, где порядок имеет значение:

const int* cantChangeTheData;
int* const cantChangeTheAddress;
3
ответ дан user7545 24 November 2019 в 03:06
поделиться