所以在我的main函数中,我有一个带有参数存储在变量中的被调用函数。我运行我的程序,并执行包含该函数的变量。我认为当我将函数或任何东西存储在变量中时,在我告诉它之前它不应该执行。
例如:
int cycle1 = cycleList(argument1, argument2);
上面的这句话现在在我的屏幕上执行。这是编写代码的正确方法吗?我想将函数存储在变量中,然后在我的代码中的某处使用变量。
答案 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
}
正如其他人所示,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;
}