имеем ли мы доступ к переменным внутри встроенной функции после завершения ее выполнения, подобно тому, чего у нас нет в обычной пользовательской функции?

#c #function #inline

#c #функция #встроенный

Вопрос:

функция calculation () не работает, когда я создаю функцию input() вне класса … это как-то связано со встроенной функцией??

 #include <iostream>

using namespace std;

class price
{
public:
int pen;
int rubber;
int scale;

void input()
{
    cout<<"enter the variablesn";
    cin>>pen>>rubber>>scale;
    cout<<"n"<<pen<<" "<<rubber<<" "<<scale;
}
};

void calculate(price p)
{
    int rate[2],total;
    rate[0]=p.pen*5;
    rate[1]=p.rubber*3;
    rate[2]=p.scale*4;
    total=rate[0] rate[1] rate[2];
    cout<<"n"<<total;
}

int main()
{
    price a,b,c;
    a.input();
    calculate(a);
    return 0;
}
  

Комментарии:

1. int rate[2] это массив из 2 элементов, но вы пытаетесь получить доступ к 3 элементам. Это неопределенное поведение (и вам вообще не нужен этот массив).

2. В дополнение к тому, что говорит Иксисарвинен, не очевидно, почему вы вообще решили использовать массив. Что не так с более простым кодом total = p.pen*5 p.rubber*3 p.scale*4; ? Нет причин добавлять массив в это вычисление

3. Что именно вы подразумеваете под «не работает»?

4. смотрите, мой вопрос заключается в том, что .. в пользовательском fn .. вся выделенная ему память стирается после завершения выполнения, и это то, что я ожидал, что мой fn сделает. Но calculate() может получить доступ к переменным input() . Это не ведет себя таким образом, когда я создаю input () вне класса, потому что в этом случае ..calculate не смог получить доступ к внутренним переменным ввода. Ранее я думал, что это как-то связано со свойством функции-члена экземпляра, которое делает ее встроенной функцией .. но я не уверен.

Ответ №1:

Нет, у нас нет. inline вообще не влияет на семантику функции C . Это влияет только на то, как эта функция обрабатывается компоновщиком.

Комментарии:

1. смотрите, мой вопрос заключается в том, что .. в пользовательском fn .. вся выделенная ему память стирается после завершения выполнения, и это то, что я ожидал, что мой fn сделает. Но calculate() может получить доступ к переменным input() . Это не ведет себя таким образом, когда я создаю input () вне класса, потому что в этом случае ..calculate не смог получить доступ к внутренним переменным ввода. Ранее я думал, что это как-то связано со свойством функции-члена экземпляра, которое делает ее встроенной функцией .. но я не уверен.пожалуйста, помогите

2. @AnveK Я предполагаю, что вы говорите о pen , rubber и scale переменных. Это переменные класса . Они объявлены в price классе и поэтому они не стираются при завершении input функции. Вместо этого удаляются только при удалении a переменной, а поскольку a объявлена в main , это происходит только при выходе main и завершении программы.

3. @AnveK Единственные переменные, которые удаляются при input завершении, — это переменные, которые объявлены в input , но в вашем коде нет переменных, объявленных в input , поэтому ничего не стирается.