所以在我的主函數中,我有一個調用函數,參數存儲在一個變量中。我運行我的程序,並執行包含該函數的變量。我認爲,當我將函數或任何東西存儲在一個變量中時,它就不應該執行,直到我告訴它爲止。C++變量和函數
例如:
int cycle1 = cycleList(argument1, argument2);
上面這個說法現在我的屏幕上執行。這是寫代碼的正確方法嗎?我想將函數存儲在變量中,稍後在我的代碼中使用該變量。
所以在我的主函數中,我有一個調用函數,參數存儲在一個變量中。我運行我的程序,並執行包含該函數的變量。我認爲,當我將函數或任何東西存儲在一個變量中時,它就不應該執行,直到我告訴它爲止。C++變量和函數
例如:
int cycle1 = cycleList(argument1, argument2);
上面這個說法現在我的屏幕上執行。這是寫代碼的正確方法嗎?我想將函數存儲在變量中,稍後在我的代碼中使用該變量。
如果你想存儲一個函數,你需要製作一個函數指針,而不是調用函數,這就是你正在做的。試試這個:
#include <functional>
std::function<int (int, int)> cycle1 = cycleList;
或者,如果你沒有進入C++ 11,試試這個:
int (*cycle1)(int, int) = cycleList;
後來的後來,你可以撥打:
cycle1(argument1, argument2);
在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();
,但你應該做這樣的事情之前,可能學習的基礎知識。
函數返回結果,並且功能對象可以存儲(和周圍複製)自身,包括它們的參數:
#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
,但對於許多目的,您也可以自己定義它們。
您也可以存儲函數指針,但是您仍然必須在調用站點處提供參數。使用函數對象,您可以先存儲參數,然後再調用它。
函數可以接受參數並可以返回結果。在程序中聲明函數的地方並不重要,只要函數名稱在編譯器調用之前就已知。
讓我們來看一個例子;
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的結果時。然後它返回結果的值。
如果您想在該時間點將程序的運行結果存儲在程序的運行時間中,那麼是的,您正在做的是正確的。
至於我可以從查詢得到的是,你在呼喚你的類參數化的方法,該方法是將一些價值。您想要將該方法的結果存儲在變量中,以便您可以根據需要使用它。但是,即使您不需要它,您也希望消除計算該方法的開銷。只有在您需要或基於特定條件時才應執行。
我可以建議你在這種情況下,有一個條件這段代碼。當您希望該方法執行並計算結果時,必須有適當的時間或滿意的條件。 例如:
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));
}
}
在這裏,你可以找到計算將僅被設定只有當條件滿足標誌的基礎上進行調用。 希望它能幫助:)
我已經爲你的問題寫了一個Java代碼。對於C++來說,它不會有太大的變化。道歉。 – Bhaskar
您還可以執行以下操作使用自動的
#include <iostream>
using namespace std;
int Foo()
{
return 0;
}
int main()
{
// your code goes here
auto bar = Foo;
return 0;
}
_'I想某處存儲在一個變量的函數,並在以後使用的變量在我的代碼.'_你有沒有這意味着我想將**函數結果**存儲在一個變量中,並稍後在代碼中的某處使用該變量。'然後是的,這是正確的。 –
聽起來像你正在尋找類似於lambda或functor的東西。 – jerry
非常感謝你們!是的,我試圖將函數的結果存儲到變量中。當我瞭解基礎知識時,我會回顧一下如何存儲函數而不是結果,但感謝您仍然回答並覆蓋我的問題的所有可能性。 – user3029001