Как вы это написали, он говорил, что "возвращаемое значение указателя равно 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
Мне не известно, как вы могли бы наблюдать за «константой», кроме как получить тип самого «g» (например, передать &f
в шаблон и определить его тип). Наконец, обратите внимание, что «char const» и «const char» означают один и тот же тип. Я рекомендую вам остановиться на одном понятии и использовать его во всем коде.
22.10.2009
int foo() const
помещают константу в другое место? / меня смущает. 02.03.2010int const f()
- это хорошо. Они будут опускать последнюю завершающую константу (обратите внимание, что это не то же самое, чтоint f() const
- это совсем другое). Матье (и я тоже) согласен с вами в том, чтоconst
после того, как тип в порядке (например,int const a = 0;
). Но не то, чтобы это было хорошо в качестве конечной константы в типах возвращаемых функций (как указывает ваш комментарий может - поэтому я хотел уточнить). 02.03.2010int const f()
- нет). 02.03.2010