Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
#1

static и const - C++

27.09.2012, 20:56. Просмотров 1964. Ответов 12
Метки нет (Все метки)

static void A();

Что дает этот статик? Что он вообще дает?

int A() const;

Что дает конст в данном случае?

static int A() const;

А теперь?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2012, 20:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос static и const (C++):

static const? - C++
если мне нужна константа в классе, как ее лучше объявить со static или без? разница будет только в том, что со статиком мне можно будет...

static const - C++
объясните, пожалуйста, вот такую странную конструкцию (накопал в старой проге): после #include идет следующее: static const char...

const static vector<type> - C++
Мне нужно создать внутри класса вектор цветов предлагаемых в конструкторе как дефолтные... лучше static, лучше const... главное - чтобы...

#define PI or static const float PI - C++
Что лучьше обьясните? #define PI 3,14159265 или static const float PI=3,14159265;

Что такое static const и для чего он нужен? - C++
Что такое static const ? И для чего он нужен ?

Инициализация в объявлении константных статических (const static) членов-данных класса. - C++
Привет. Подскажите пожалуйста почему нельзя создавать в классе const static float, а const static int можно? class A{ const...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
27.09.2012, 20:58 #2
Цитата Сообщение от Kgfq Посмотреть сообщение
Что дает этот статик? Что он вообще дает?
позволяет вызывать метод класса без необходимости создания самого объекта.

static int A() const;
Нет такого. Квалификатор конст здесь говорит о том, что данные класса не будут изменены (ну кроме mutable аттрибутов). НО в статические функции класса не передается указатель на класс this, менять нечего
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
27.09.2012, 21:58  [ТС] #3
Andsteadur, статик накладывает какие-то ограничения?

конст: нельзя менять только сам объект, внутри которого вызвано или все глобальные переменные тоже?
0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
27.09.2012, 22:31 #4
Цитата Сообщение от Kgfq Посмотреть сообщение
Andsteadur, статик накладывает какие-то ограничения?
Нельзя использовать не статические переменные/не статические функции класса.

Цитата Сообщение от Kgfq Посмотреть сообщение
нельзя менять только сам объект, внутри которого вызвано или все глобальные переменные тоже?
const будет относиться к this так что нельзя менять лишь сам объект.
0
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
28.09.2012, 08:38 #5
конст: нельзя менять только сам объект, внутри которого вызвано или все глобальные переменные тоже?
Использовать глобальные переменные внутри экземпляра класса - это код с запашком.
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
28.09.2012, 08:50 #6
Цитата Сообщение от Kgfq Посмотреть сообщение
static void A();
Что дает этот статик? Что он вообще дает?
Цитата Сообщение от Andsteadur Посмотреть сообщение
позволяет вызывать метод класса без необходимости создания самого объекта.
А кто сказал, что речь о классах?
У static есть еще и другие значения, например:
C++
1
2
3
4
5
6
7
//somefile.cpp
#include <iostream>
 
/*static*/ void func()
{
    std::cout << "Hello" << std::endl;
}
C++
1
2
3
4
5
6
7
8
//main.cpp
void func();
 
int main()
{
    func();
    return 0;
}
static ограничивает область видимости фукнции одним файлом. Если в первом файле его раскоментировать, то будет ошибка компиляции.
0
ForEveR
В астрале
Эксперт С++
7973 / 4735 / 321
Регистрация: 24.06.2010
Сообщений: 10,542
Завершенные тесты: 3
28.09.2012, 08:54 #7
Kastaneda, В С++ для функций не стоит юзать static однако. Анонимные namespace-ы не просто так придуманы.
0
Kastaneda
28.09.2012, 08:58
  #8

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Kastaneda, В С++ для функций не стоит юзать static однако. Анонимные namespace-ы не просто так придуманы.
СтОит/не стОит это уже другой вопрос (конечно его ни кто не использует). Просто есть же еще такое предназначение static'а (и оно работает в С++), вот я и упомянул о нем

0
yekka
385 / 149 / 8
Регистрация: 12.05.2011
Сообщений: 450
28.09.2012, 14:44 #9
Цитата Сообщение от ForEveR Посмотреть сообщение
В С++ для функций не стоит юзать static однако
это еще почему?
0
Andsteadur
153 / 137 / 3
Регистрация: 23.05.2009
Сообщений: 275
28.09.2012, 14:56 #10
Holy standard:
Цитата Сообщение от Holy standard
The use of the static keyword is deprecated when declaring objects in a namespace scope (see annex D);
the unnamed-namespace provides a superior alternative.
0
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
28.09.2012, 15:02 #11
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
В новом стандарте уже не deprecated, кстати.

Но вообще по тем причинам, что у static вагон значений: влияет и на область видимости, и на время жизни, и на доступность при компоновке, и всё это в зависимости от контекста, где упоминается. Просто чтобы поменьше неоднозначностей было.
3
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
28.09.2012, 17:50 #12
Цитата Сообщение от yekka Посмотреть сообщение
это еще почему?
Не то, чтобы не стОит, просто это не C++ way, ибо
Цитата Сообщение от ForEveR Посмотреть сообщение
Анонимные namespace-ы не просто так придуманы.
Добавлено через 2 минуты
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
В новом стандарте уже не deprecated, кстати.
Убрали? Просто лень после работы в стандарт лезть.
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
28.09.2012, 22:03  [ТС] #13
а в чем особенности статик переменных?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2012, 22:03
Привет! Вот еще темы с ответами:

int const * const foo(const int* param) const - разъясните значение квалификаторов - C++
int const * const foo(const int* param) const -----1------2----------3----------------4 1: ? 2: делает содержимое массива или...

Ошибка компиляции "forbids in-class initialization of non-const static member" - C++
Доброго времени суток! Прошу помощи, так как сам понять в чем проблема не могу. Имею вот такой код: #include &quot;iostream&quot; ...

char operator[](unsigned short offset) const; // что означает const? - C++
Собстенно вопрос уже озвучен :).

Что это bool operator== (const CLASS&) const; - C++
Что это? class CLASS { public: bool operator== (const CLASS&amp;) const; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.09.2012, 22:03
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru