2012-04-23 3 views
0

Можно создать дубликат:
Why there is no concept of “const-correctness” for class's static member functions?Почему нет постоянных статических функций?

эти вопросы очень похожи на многие я нашел на SO, но прежде чем вы получите ваш дубликат после запуска пальцем подергивания, позвольте мне объяснить:

Статическая функция не имеет понятия объекта this, и это не имеет смысла иметь статическую функцию const, поскольку const будет означать const *this, h не существует в этом контексте.

Однако, а как насчет других статических переменных в одном и том же пространстве имен? Почему статическая функция-константа не может работать так, что она ставит спецификатор const на все статические переменные в одном и том же пространстве имен (или, возможно, все)?

Поскольку статическая функция const не имеет никакой цели и не будет компилироваться, есть ли причина, почему это не может иметь отдельного значения? То есть: «статическая функция const не может изменять другие статические переменные».

Может быть, это усложняет реализацию языка? Это когда-нибудь считалось?

Благодаря

+2

Существует точный дубликат этого ... –

+0

Да, совсем недавно. – Potatoswatter

+0

Ммм ... Я искал его. Вероятно, это скрыто за многими дубликатами, о которых я упоминал. – swalog

ответ

-4

Однако, как насчет других статических переменных в том же пространстве имен? Почему статическая функция-константа не может работать так, что она ставит спецификатор const на все статические переменные в одном и том же пространстве имен (или, возможно, все)?

Это хорошая причина, почему: если вы даже не знаете, что это значит, как вы ожидаете убедить других в том, что это хорошая идея?

Другое дело, что это не сработает. Рассмотрим

int i = 3; 
int * p = &i; 
static void incI() const // with your hypothetical language extension 
{ 
    ++*p; // okay, p is a const pointer to a non-const int 
} 

const вне определения означает «только для чтения», но все же позволяет пишет, если у вас есть еще один способ доступа к объекту.

И что именно было бы полезно?

(Изменить: как указано в недавно удаленном комментарии, я должен, вероятно, упомянуть, что это причины, по которым это была бы плохая идея, но я не знаю, было ли это серьезно рассмотрено, и если да, то это причины, по которым он был отклонен.)

+0

-1 два ошибочных аргумента. –

+1

@ Cheersandhth.-Alf« Вы ошибаетесь », на самом деле никому не помогает. Возможно, вы могли бы объяснить, что не так с моими очками? – hvd

+0

Я не говорю, что вы ошибаетесь. Это, действительно, неверное представление моего замечания (т. е. третьего заблуждения), чтобы сказать это. «ошибочный». –

Смежные вопросы