Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 17.08.2016
Сообщений: 37

Inline функции в классах

11.06.2017, 16:00. Показов 4745. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Недавно прочитал, что все функции которые определяются в классе по дефолту inline. Что меня настораживает так как мой ̶б̶ы̶д̶л̶о̶к̶о̶д̶е̶р̶с̶к̶и̶й̶ стиль программирования подразумевает определения функций именно в классах. И вот не хотелось бы чтобы все мои функции были бы встраиваемые. Короче не могли бы вы немного посветить в эту тему ̶г̶л̶у̶б̶ж̶е̶ .
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.06.2017, 16:00
Ответы с готовыми решениями:

Inline функции в классах
можно функцию сделать подставляемой, не определяя при объявлении,а определить под классом?

Inline-функции в шаблонных классах
Стоит ли применять inline-функции для описания методов шаблонного класса?

Inline функции - на сколько должна быть маленькая функция, чтоб она подошла под inline?
Здравствуйте. Знаю теорию, но не понимаю, на сколько должна быть маленькая функция, чтоб она подошла под inline ? Как...

24
53 / 31 / 13
Регистрация: 21.05.2017
Сообщений: 109
11.06.2017, 21:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Renji Посмотреть сообщение
"Создавать" это в смысле конструкторы streambuf и ostream вызвать?
Хотя бы посмотрел уж как-там реализовано создание cout. Оно там даже не std::ostream cout;. И это я еще до его внутренностей не добрался, а лишь о создании самого объекта толкую.
Цитата Сообщение от Renji Посмотреть сообщение
Вы собственно мой пример запустите, нормально он работает.
Ну вот измени main на
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    MyStreambuf myStreambuf;
    std::ostream stream(&myStreambuf);
    
    auto f = [&stream, x = 55555] () {
        for (unsigned i = 0; i < 100; ++i) {
            stream << x;
            //std::cout << x;
        }
    };
    
    std::thread th(f);
    for (unsigned i = 0; i < 100; ++i) {
        stream << 66666;
        //std::cout << 66666;
    }
    th.join();
}
и супер-буфер уже не канает, потому что не соблюдает необходимые требования.
mingw впихивает всё, что может пригодится коду, а не выкидывает лишнее, оценивая возможную работу приложения. Если буфер должен работать так-то, то он и запхнет его именно такой, а не упростит для уменьшения размера. Конечно, мегабайт - достаточно много, даже слишком, но, с другой стороны, если нужен минимализм, то лично я бы предпочел ассемблер или C, а не C++.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
11.06.2017, 21:38
Цитата Сообщение от MasterOfAlteran Посмотреть сообщение
Ну вот измени main на
И замени printf на WriteConsole. И усе работает. Чего ему сделается то, если все гарантии потокобезопасности ложатся на ОС?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class CinStreambuf:public std::streambuf
{
public:
    CinStreambuf():stdOut(GetStdHandle(STD_OUTPUT_HANDLE)){}
    std::streamsize xsputn(const char*s,std::streamsize n)
    {
        DWORD count;
        WriteConsoleA(stdOut,s,n,&count,NULL);
        return n;
    }
    int overflow(int c=EOF)
    {
        char value=c;
        xsputn(&value,1);
        return c;
    }
 
private:
    HANDLE stdOut;
};
0
53 / 31 / 13
Регистрация: 21.05.2017
Сообщений: 109
11.06.2017, 21:49
Цитата Сообщение от Renji Посмотреть сообщение
И замени printf на WriteConsole. И усе работает.
Запусти с перенаправлением вывода main > output.txt и не работает.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
11.06.2017, 21:57
Цитата Сообщение от MasterOfAlteran Посмотреть сообщение
Запусти с перенаправлением вывода main > output.txt и не работает.
А стандарт разве что-то говорит про перенаправление вывода и прочее межпроцессное взаимодействие?
Впрочем, без разницы. Работающие с перенаправлением API функции тоже наверняка гарантируют потоковую безопасность.
0
53 / 31 / 13
Регистрация: 21.05.2017
Сообщений: 109
11.06.2017, 22:09
Цитата Сообщение от Renji Посмотреть сообщение
А стандарт разве что-то говорит про перенаправление вывода и прочее межпроцессное взаимодействие?
Ну так с нормальным буфером же работает, а с упрощенным велосипедным буфером - нет.
Цитата Сообщение от Renji Посмотреть сообщение
Работающие с перенаправлением API функции тоже наверняка гарантируют потоковую безопасность.
Замени на
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
{
    MyStreambuf myStreambuf;
    std::ostream stream(&myStreambuf);
    
    auto f = [&stream, x = 55555] () {
        for (unsigned i = 0; i < 100; ++i) {
            //stream << x;
            //std::cout << x;
            printf("%d", x);
        }
    };
    
    std::thread th(f);
    for (unsigned i = 0; i < 100; ++i) {
        //stream << 66666;
        //std::cout << 66666;
        printf("%d", 66666);
    }
    th.join();
}
и, чудо - одиночные вызовы printf потокобезопасны (емнип, даже стандарт этого требует). То есть дело-то не в printf было.

Добавлено через 7 минут
Лан, закончили, а то мы так всю ночь будем хренью заниматься.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2017, 22:09

inline функции vs инструкции inline функций
Здравствуйте. Чтобы не писать повторно код, нужно использовать функции. Но если функции компактные, то их лучше делать inline функциями, т....

inline - функции
Стоит-ли добавлять префикс inline ко всем функциям, состоящим из 1-2 строк?

Inline функции
Друзья!Инлайн функции могу быть определены только внтури класса?Или могут быть определены вне класса?Если вне,то как?Спасибо!

Inline функции.
Здравствуйте. Скажите пожалуйста, объявление функции как inline нужно делать как в прототипе так и в определении или достаточно только в...

inline функции
Как рабоает функция inline, и какие у неё преимущества? Если она такая крутая как я понял, то зачем простые функции??


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru