Oracle была поздней в поддержке СОЕДИНЕНИЯ... НА (ANSI) синтаксис (только в Oracle 9), вот почему разработчики Oracle часто не используют его.
Лично, я предпочитаю использовать синтаксис ANSI, когда логически ясно, что одна таблица управляет запросом, и другие - таблицы поиска. Когда таблицы "равны", я склонен использовать декартов синтаксис.
производительность не должна отличаться вообще.
Как вы это написали, он говорил, что "возвращаемое значение указателя равно 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
в шаблон и вывести его тип, например). Наконец, обратите внимание, что "
В 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 */