Почему бессмыслен спецификатор типа на типе возврата?

Oracle была поздней в поддержке СОЕДИНЕНИЯ... НА (ANSI) синтаксис (только в Oracle 9), вот почему разработчики Oracle часто не используют его.

Лично, я предпочитаю использовать синтаксис ANSI, когда логически ясно, что одна таблица управляет запросом, и другие - таблицы поиска. Когда таблицы "равны", я склонен использовать декартов синтаксис.

производительность не должна отличаться вообще.

21
задан MSalters 22 October 2009 в 14:26
поделиться

2 ответа

Как вы это написали, он говорил, что "возвращаемое значение указателя равно const". Но r-значения неклассового типа не подлежат изменению (унаследованы от C), и, таким образом, в Стандарте говорится, что r-значения неклассового типа никогда не квалифицируются как константа (крайняя правая константа игнорировалась, даже если она указана вами), поскольку константа была бы отчасти избыточной . Его не пишут - пример:

  int f();
  int main() { f() = 0; } // error anyway!

  // const redundant. returned expression still has type "int", even though the 
  // function-type of g remains "int const()" (potential confusion!)
  int const g(); 

Обратите внимание, что для типа «g» константа имеет значение , но для выражений rvalue, сгенерированных из типа int const , константа игнорируется. Таким образом, следующая ошибка:

  int const f();
  int f() { } // different return type but same parameters

Мне не известно, что вы могли бы наблюдать «const», кроме как получить тип самой «g» (и передать & f в шаблон и вывести его тип, например). Наконец, обратите внимание, что "

23
ответ дан 29 November 2019 в 21:28
поделиться

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

const int i = (const int)42; /* meaningless, the 42 is never gonna change */
int const foo(void); /* meaningless, the value returned from foo is never gonna change */

Только объекты могут быть осмысленно квалифицированы.

const int *ip = (const int *)&errno; /* ok, `ip` points to an object qualified with `const` */
const char *foo(void); /* ok, `foo()` returns a pointer to a qualified object */
4
ответ дан 29 November 2019 в 21:28
поделиться