|
Глупые вопросы по типам данных |
|
|
|
Apr 26 2007, 07:20
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(Oldring @ Apr 26 2007, 04:10)  static inline - это уже плюсы. В GCC, к которому относится упомянутый выше WinAVR, имется расширение для С в виде inline, т.ч. это слово там валидно и в С режиме. Цитата(Oldring @ Apr 26 2007, 04:10)  inline подставляемый статический метод класса. Насколько можно судить из: Цитата Очень часто встречается связка static inline - для определения инлайновых функций прямо в хидер файле. Получается единственное определение функции при многократном включении файла в проект. речи тут ни о каких классах вообще нет. Статические функции-члены классов - это несколько из другой оперы. Кстати, в С++ не бывает статических методов класса. Методы всегда нестатические. Цитата(Oldring @ Apr 26 2007, 04:10)  Для глобальных функций использовать очень даже не нужно. Получится совсем наоборот: в каждм модуле будет сгенерирована своя независимая копия inline функции  Если функция объявлена как встраиваемая, то она в любом случае будет сгенерирована в каждой единице компиляции отдельно.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Apr 26 2007, 08:45
|
Частый гость
 
Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631

|
Цитата(dxp @ Apr 26 2007, 10:20)  Кстати, в С++ не бывает статических методов класса. Методы всегда нестатические. А что в C++ появились методы класса ? Или речь идет о каком либо расширении языка как в C++ Builder ?
|
|
|
|
|
Apr 26 2007, 10:18
|
Частый гость
 
Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631

|
Цитата(Oldring @ Apr 26 2007, 12:53)  Если под методами подразумевались функции-члены класса, то с чего бы это им не быть статическими ? Статические функции (члены классы) используются довольно часто.
|
|
|
|
|
Apr 26 2007, 10:19
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата static inline - это уже плюсы. inline подставляемый статический метод класса. Цитата В GCC, к которому относится упомянутый выше WinAVR, имется расширение для С в виде inline, т.ч. это слово там валидно и в С режиме. Если быть точным inline описан в стандарте С99, вмеcте с другими заимствованиями из плюсов. C99 introduced several new features, many of which had already been implemented as extensions in several compilers: -Inline functions -Variables can be declared anywhere (as in C++), rather than only after another declaration or the start of a compound statement -Several new data types, including long long int, optional extended integer types, an explicit boolean data type, and a complex type to represent complex numbers -Variable-length arrays -Support for one-line comments beginning with //, as in BCPL or C++
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Apr 26 2007, 10:37
|

Гуру
     
Группа: Свой
Сообщений: 3 041
Регистрация: 10-01-05
Из: Москва
Пользователь №: 1 874

|
Цитата(Shamil @ Apr 26 2007, 11:18)  Если под методами подразумевались функции-члены класса, то с чего бы это им не быть статическими ? Статические функции (члены классы) используются довольно часто. Ну так в плюсах традиционно слова "член" и "метод" полные синонимы. Если же претендовать на формальную точность, конечно, нужно говорить про методы объекта и методы класса. В этом смысле статические члены класса являются методами самого класса, а нестатические - методами объектов этого класса. Так как в плюсах вообще говоря нет динамически создаваемых классов, и классы синтаксически не эквивалентны объектам, такая интерпретация не может вызвать противоречия. Цитата(beer_warrior @ Apr 26 2007, 11:19)  Если быть точным inline описан в стандарте С99, вмеcте с другими заимствованиями из плюсов. Признаюсь, я никогда не пользовал C99, считая, что если уж использовать нововведения по сравнению с первым ANSI C стандартом - то плюсы ничем не хуже. Не думаю, что в C99 интерпретация static inline префикса у функции будет чем-то отличаться от плюсов. То есть inline-подставляемая статическая функция. При определении функции в хедере вещь бесполезная и даже вредная. Ну а в модуле, конечно, можно использовать, учитывая особенности традиционных стилей кодирования в C.
--------------------
Пишите в личку.
|
|
|
|
|
Apr 26 2007, 10:39
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(Shamil @ Apr 26 2007, 12:45)  А что в C++ появились методы класса ? Или речь идет о каком либо расширении языка как в C++ Builder ? Никаких расширений. Методы в С++ - это чисто терминология ООП, т.е. методы в нем - это функции-члены, которые могут быть переопределены в классах-потомках в контексте полиморфизма. Иными словами, в С++ методы - это виртуальные фукнции. Т.е. нестатические функции-члены классов делятся на обычные и виртуальные - вот эти виртуальные и являются методами. А все остальные - не методы. Статические функции-члены классов - это вообще отдельная песня. Эти функции к самим объектам класса отношение имеют весьма опосредованное (для того, чтобы из статической функции-члена класса получить доступ к полям класса, надо явно указывать конкретный объект, к которому производится обращение). Фактически, это обычные глобальные фукнции, у которых область видимости ограничена классом, к которому они принадлежат, и которые имеют доступ к закрытым (и защищенным) членам своего класса. Виртуальными эти функции никак не могут быть, следовательно в С++ термин "статический метод" есть нонсенс.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Apr 26 2007, 10:43
|
Частый гость
 
Группа: Свой
Сообщений: 160
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631

|
Цитата(dxp @ Apr 26 2007, 13:39)  Никаких расширений. Методы в С++ - это чисто терминология ООП, т.е. методы в нем - это функции-члены, которые могут быть переопределены в классах-потомках в контексте полиморфизма. Иными словами, в С++ методы - это виртуальные фукнции. Т.е. нестатические функции-члены классов делятся на обычные и виртуальные - вот эти виртуальные и являются методами. А все остальные - не методы. Теперь понятно, спасибо.
|
|
|
|
|
Apr 26 2007, 11:23
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(Oldring @ Apr 26 2007, 14:37)  Ну так в плюсах традиционно слова "член" и "метод" полные синонимы. Это согласно какой же традиции С++? Огласите. Цитата(Oldring @ Apr 26 2007, 14:37)  Если же претендовать на формальную точность, конечно, нужно говорить про методы объекта и методы класса. Фунции-члены класса != методы класса. См пост выше. Цитата(Oldring @ Apr 26 2007, 14:37)  В этом смысле статические члены класса являются методами самого класса, а нестатические - методами объектов этого класса. Код class A { public: ... static f(); };
A a; ... a.f(); // вызвали статическую функцию-член класса путем обращения к объекту Как же так, статическую функцию-член применили не к классу, а к объекту?! Она же, типа, следуя "формальной точности", принадлежит классу, а не к объекту. Цитата(Oldring @ Apr 26 2007, 14:37)  То есть inline-подставляемая статическая функция. При определении функции в хедере вещь бесполезная и даже вредная. Ну а в модуле, конечно, можно использовать, учитывая особенности традиционных стилей кодирования в C. inline функция должна быть полностью определена перед ее использованием. Удобнее всего ее определение поместить в заголовочный файл, что и является общепринятой практикой в С++. P.S. В С++ используется термин "единица компиляции", а не модуль. Модуль - это из других языков. Цитата(Oldring @ Apr 26 2007, 14:50)  Не верьте этому разделению. Bjarne Stroustrup - The C++ Programming Language 3rd Edition: Цитата 12.2.6 Virtual Functions [derived.virtual] ... A virtual member function is sometimes called a method. Теперь сами решите кому верить - Бьерну Страустурпу (автору языка С++) или отдельным самоуверенным товарисчам.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|