没有参数调用的函数不会给出错误

时间:2017-01-07 13:57:45

标签: c++ g++

当我观察到这个问题时,我正在编写一些问题。因为函数应该是一组给定名称的语句,可以从程序的某个点调用。考虑一个给出整数绝对值的简单程序:

#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;
  }
}

当我运行这个程序时:

rohan@~/Dropbox/cprog/demos : $ g++ testFunction.cpp 
rohan@~/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
rohan@~/Dropbox/cprog/demos : $ 

我的问题是,为什么这个程序没有给我错误,我应该用参数调用,我的g ++有什么问题( - v 4.8.5)?为什么这个节目在每次通话时输出1?或者我错过了什么?我真的很困惑。

1 个答案:

答案 0 :(得分:1)

本声明

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

是对的。函数指示符getAbsolute根据函数声明隐式转换为函数指针int (*)( int )

int getAbsolute(int x);

并使用以下运算符operator <<

输出此指针
basic_ostream<charT,traits>& operator<<(bool n); 

你会得到像这样的结果

abs(-5) : 1

因为函数指针不等于零,并且此运算符是此类型的函数指针的最佳重载运算符operator <<