определение встроенной функции в C ++? - PullRequest
0 голосов
/ 24 февраля 2012

Это тестовый вопрос на C ++. Тест был сделан.

class Person
{
    std::string name;
    public:
          std::string const &getname(void) const ;      
} ;

inline std::string const &Person::getname() const
{
        return name; 
}

A: Компьютер вставляет код функции getname ()

B: компьютер генерирует вызов функции getname ()

C: возвращаются значения параметров по умолчанию для вызывающей функции

D: Все аргументы функции помещаются в стек памяти

Я выбираю А. Это правильно?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Компилятор может встроить функцию.

Компилятор / компоновщик не будет жаловаться, когда тело функции найдено в нескольких блоках компиляции, если тело одинаково.

1 голос
/ 24 февраля 2012

Из C ++ 11 черновика

§ 7.1.2 \ 2

Объявление функции (8.3.5, 9.3, 11.3) свстроенный спецификатор объявляет встроенную функцию.Встроенный спецификатор указывает реализации, что внутреннее замещение тела функции в точке вызова предпочтительнее обычного механизма вызова функции .Реализация не требуется для выполнения этой внутренней замены в точке вызова;однако, даже если эта встроенная подстановка опущена, другие правила для встроенных функций, определенных в 7.1.2, все равно должны соблюдаться.

Таким образом, что касается требований , это в основном простообычная функция, так что вариант B. Может иметь или не иметь свой код, вставленный в вызывающую функцию, но это также относится к функциям , а не , помеченным как встроенные, и, таким образом, на самом деле не имеет ничего общего с inline ключевое слово.

...