2017-01-07 68 views
2

當我觀察到這種情況時,我正在編寫一些問題。由於函數應該是一組給定名稱的語句,可以從程序的某個點調用它。考慮一個簡單的程序,給出了一個整數的絕對值:不帶參數調用的函數不會給出錯誤

#include <iostream> 
#include <vector> 
using namespace std; 

int getAbsolute(int x) { 
    return x > 0 ? x : -1*x; 
} 

int main() { 
    vector<int> arr; 

    for(int i = -5; i < 5; i++) 
    arr.push_back(i); 

    for(int i = 0; i < arr.size(); i++) { 
    cout << "abs(" << arr[i] << ") : " 
     << getAbsolute << endl; 
    } 
} 

當我運行此程序:

[email protected]~/Dropbox/cprog/demos : $ g++ testFunction.cpp 
[email protected]~/Dropbox/cprog/demos : $ ./a.out 
abs(-5) : 1 
abs(-4) : 1 
abs(-3) : 1 
abs(-2) : 1 
abs(-1) : 1 
abs(0) : 1 
abs(1) : 1 
abs(2) : 1 
abs(3) : 1 
abs(4) : 1 
[email protected]~/Dropbox/cprog/demos : $ 

我的問題是,爲什麼沒有這個節目給我的錯誤,我是應該用參數調用,我的g ++( - v 4.8.5)有問題嗎?爲什麼這個程序在每次調用時輸出1?或者我在這裏錯過了什麼?我很困惑。

+1

你沒有調用函數,只是使用它的地址 – torkleyy

+0

你想嘗試的是'getAbsolute()' – torkleyy

+0

你的意思是1是從getAbsolute內存地址解引用的值?但是,由於函數的地址只是一個原始指針,因此編譯器如何確定讀取距離有多遠? –

回答

1

本聲明

cout << "abs(" << arr[i] << ") : " 
     << getAbsolute << endl; 

是正確的。功能標誌getAbsolute隱含根據函數聲明

int getAbsolute(int x); 

轉化爲函數指針int (*)(int)和該指針是使用以下操作operator <<

basic_ostream<charT,traits>& operator<<(bool n); 

輸出,你會得到這樣

結果
abs(-5) : 1 

因爲函數指針不等於零,並且這個op對於這種類型的函數指針,erator是最好的重載運算符operator <<

+0

這個問題是重複的。你最好關閉它比回答:) –

相關問題