为什么将函数隐式转换为bool?

时间:2017-09-03 04:50:39

标签: c++ function return boolean implicit-conversion

我试图在我的代码中找到一个错误,并发现返回一个函数名称被隐式转换为bool为true:

bool isArabicNumeral(char arg) { /* Details not important*/ };
bool isValidVarNameFirstChar(char arg) { /* Details not important */ }
bool isValidVarNameContinuationChar(char arg)
{
    return isValidVarNameFirstChar || isArabicNumeral(arg) ? true : false;
    // I forgot to write the brackets after isValidVarNameFirstChar 
    // so the function wasn't called. This always returns true.
}

所以我发现C ++允许转换为bool,只要它对这种转换很有用,所以我可以这样做:

void afunction() {};

int main()
{
    bool boolVariable = afunction; // This works
    int intVariable = afunction; // This doesn't work

    return 0;
}

我的问题是,我知道有一个从函数到bool的隐式转换,但为什么它总是返回true。另外,实际上转换为bool的是什么?它是函数指针,所以它实际上返回类似0xF7B3A1D0的东西,并转换为true,因为任何非零都是真的吗?还是它返回函数类型名称?或者是其他东西?这很奇怪,通常当我在一个函数之后意外地离开括号时,我的编译器通常会说“非标准使用函数调用”。

另外,这对转换有何影响?

2 个答案:

答案 0 :(得分:1)

  

它是函数指针,所以它实际上返回类似0xF7B3A1D0的东西,并且当非零为真时转换为true吗?

答案 1 :(得分:0)

是的,理由是bool检查只是看到它不是假的(也就是0),如果它不是假的,那么它是真的。