我试图在我的代码中找到一个错误,并发现返回一个函数名称被隐式转换为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,因为任何非零都是真的吗?还是它返回函数类型名称?或者是其他东西?这很奇怪,通常当我在一个函数之后意外地离开括号时,我的编译器通常会说“非标准使用函数调用”。
另外,这对转换有何影响?
答案 0 :(得分:1)
它是函数指针,所以它实际上返回类似0xF7B3A1D0的东西,并且当非零为真时转换为true吗?
是
答案 1 :(得分:0)
是的,理由是bool检查只是看到它不是假的(也就是0),如果它不是假的,那么它是真的。