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

При вынесении определения всегда ли нужно указывать функцию как inline явно? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Область видимости анонимного объекта при вызове функции http://www.cyberforum.ru/cpp-beginners/thread1231879.html
Доброго дня. Хотел поинтересоваться: когда уничтожится анонимный объект, переданный как параметр функции? #include <stdio.h> #include <string> using namespace std; class Obj{ private: string s;
C++ STL Заполнить массив размером 10 случайными числами от 0 до 10, отсортировать его по убыванию и вывести Заполнить массив размером 10 случайными числами от 0 до 10, отсортировать его по убыванию и вывести в выходной поток. Добавлено через 20 минут пример, но он с ошибками #include <vector> #include <algorithm> #include <iostream> #include <functional> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread1231849.html
C++ STL Заполнить строку латинским алфавитом и вывести ее в выходной поток
Заполнить строку латинским алфавитом и вывести ее в выходной поток. С++ Добавлено через 20 минут вот пример выполнения, но в нем ошибки #include <string> #include <iostream> using namespace std; int main() { string s;
STL Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток C++
Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток. Добавлено через 19 минут пример, но в нем ошибки #include <vector> #include <iostream> #include <iomanip> using namespace std; int main() {
C++ STL Заполнить вектор длинной 10 случайными числами от 0 до 9 и вывести его в выходной поток http://www.cyberforum.ru/cpp-beginners/thread1231846.html
Заполнить вектор длинной 10 случайными числами от 0 до 9 и вывести его в выходной поток.
C++ Используя STL контейнер set заполнить массив Задание 2. Данную задачу решить не используя метод sort, а используя STL контейнер: set. Заполнить массив размером 10 случайными числами от 0 до 10, отсортировать его по возрастанию и вывести в выходной поток. Добавлено через 16 минут пример решения #include <vector> #include <algorithm> #include <iostream> using namespace std; подробнее

Показать сообщение отдельно
TierX
 Аватар для TierX
19 / 19 / 0
Регистрация: 28.02.2014
Сообщений: 138
22.07.2014, 12:35  [ТС]     При вынесении определения всегда ли нужно указывать функцию как inline явно?
Цитата Сообщение от Toshkarik Посмотреть сообщение
Нет. Более того, если явно определить функцию как inline в одной единице трансляции и вызвать ее из другой, то при компиляции появится ошибка unresolved external ( undefined reference, или другая, в зависимости от компилятора ).
действительно я попробывал определить функции класа как inline в отедльном cpp и испольщуя хедер с описанием класа в другом спп запустить функцию. Компилятор заматюкался.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// хедер
#ifndef __I__
#define __I__
#include<iostream>
class X{
public:
    X();
    int x;
    void show();
};
#endif
___
// срр определения функций.
#include "I.h"
inline X::X(){x=6;}
inline void X::show(){std::cout<<x;}
___
// main
#include "i.h"
 
int main()
{
X x1;
x1.show();
}
___

Следовательно явно inline в срр файле обьявлять нельзя. Чото много както мутной жижи с этим всем.
Значит явное указание inline приминимо только для хедеров. А выносное определение функций класса в срр отдаеться на автоматическое решение компилятора.
В тоже время не факт что явно обьявленые фун. в хедере будут inline 100%. Следовательно inline служит только для того чтобы функции можно было определять в хедере (нетолько функции члены класа) без дальнейшиз ошибок множественого определения их же.
Покачто так все выглядит

PS Хедер есть единицей трансляции?
 
Текущее время: 23:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru