C ++变量和函数

时间:2014-02-07 13:23:02

标签: c++ function variables

所以在我的main函数中,我有一个带有参数存储在变量中的被调用函数。我运行我的程序,并执行包含该函数的变量。我认为当我将函数或任何东西存储在变量中时,在我告诉它之前它不应该执行。

例如:

int cycle1 = cycleList(argument1, argument2);

上面的这句话现在在我的屏幕上执行。这是编写代码的正确方法吗?我想将函数存储在变量中,然后在我的代码中的某处使用变量。

7 个答案:

答案 0 :(得分:1)

如果你想在程序运行时的那个时间存储函数的结果,那么是的,你正在正确地进行。

答案 1 :(得分:0)

如果你想存储一个函数,你需要创建一个指向函数的指针,而不是调用函数,这就是你正在做的事情。试试这个:

#include <functional>

std::function<int (int, int)> cycle1 = cycleList;

或者,如果您无法访问C ++ 11,请尝试以下操作:

int (*cycle1)(int, int) = cycleList;

然后你可以打电话:

 cycle1(argument1, argument2);

答案 2 :(得分:0)

在C ++中,变量存储值,而不是函数;和一个调用函数来获取值的表达式会立即执行。因此,您的示例调用函数来获取int值,然后将该值存储在变量中。

有办法做你想做的事:

// Store a lambda function object, capturing arguments to call it with.
// This doesn't call the function.
auto cycle1 = [=]{cycleList(argument1, argument2);};

// Call the function later. This calles 'cycleList' with the captured arguments.
int result = cycle1();

但在做这类事之前你应该学习基础知识。

答案 3 :(得分:0)

函数返回结果,函数对象可以自己存储(并复制),包括其参数

#include <iostream>

int cycleList(int arg1, int arg2) { return arg1 + arg2; }

struct cycleListObj
{
    int arg1, arg2;

    // constructor stores arguments for later use
    cycleListObj(int a1, int a2): arg1(a1), arg2(a2) {}

    // overload function call operator()
    int operator()() { return arg1 + arg2; }
};

int main()
{
    int result1 = cycleList(1, 1);   // stores 2 into result1
    cycleListObj fun(1, 1);          // defines a function object fun with arguments 1, 1
    int result2 = fun();             // calls the function object, and stores the result into result2
    std::cout << result1 << result2; // outputs 22
}

Live Example

正如其他人所示,C ++标准库定义了自己的通用函数对象std::function,但出于多种目的,您也可以自己定义它们。

您也可以存储函数指针,但是您仍然必须在调用站点提供参数。使用函数对象,您可以先存储参数,然后再调用它。

答案 4 :(得分:0)

函数可以接受参数并返回结果。只要函数名在编译之前为编译器所知,那么在程序中声明函数并不重要。

我们来看一个例子;

int Add(int num1, int num2)
    {
        return num1 + num2;
    }

    int main()
    {
        int result, input1, input2;

        cout << "Give a integer number:";
        cin >> input1;
        cout << "Give another integer number:";
        cin >> input2;

        result = Add(input1,input2);

        cout << input1 << " + " << input2 << " = " << answer;
        return 0;
    }

这里我在main()之前定义了Add()函数,因此main知道定义了Add()。所以在main()中,当add()调用时,它会发送两个参数并获得返回num1 + num2的结果。然后它将返回的值发送给结果。

答案 5 :(得分:0)

就我从查询中得到的结果而言,你在类中调用一个返回一些值的参数化方法。您希望将该方法的结果存储在变量中,以便您可以根据需要使用它。但是,即使您不需要,也希望消除计算该方法的开销。它只应在您需要时或根据特定条件执行。

在这种情况下,我可以建议您,将此代码置于某个条件下。当您希望该方法执行并为您计算结果时,必须有适当的时间或满足的条件。 例如:

public class BaseCondition {
    public int compute(int a, int b) {
        return (a + b);
    }

    public boolean set(boolean flag) {
        flag = true;
        return flag;
    }

    public int subtract(int a, int b) {
        return (a - b);
    }

    public int callCompute(int a, int b) {
        boolean flag = false;
        int computedVal = 0;
        if (a < b || a == b) {
            flag = set(flag);
        }
        if (flag) {
            computedVal = compute(a, b);
        } else {
            computedVal = subtract(a, b);
        }

        return computedVal;
    }

    public static void main(String[] args) {
        BaseCondition obj = new BaseCondition();
        int a = 11;
        int b = 51;
        System.out.println("Result=" + obj.callCompute(a, b));

    }

}

在这里,您可以发现只在满足条件时才设置的标志调用计算。 希望它有所帮助:)

答案 6 :(得分:0)

您还可以使用自动

执行以下操作
#include <iostream>
using namespace std;

int Foo()
{
    return 0;
}

int main() 
{
    // your code goes here
    auto bar = Foo;
    return 0;
}