C bool表达式作为函数参数调用错误的超载
C++ bool expression as function argument calls wrong overload
在下面的测试程序中,用bool谓词调用checkit
方法,而是调用整数过载。为什么?
(i == 10)
应该创建一个布尔值,然后应触发布尔超载,否?
程序输出
should be int
I'm a bool 1
should be bool
I'm a bool 1
should also be bool
I'm a int 1
源
class Overload
{
public:
void checkIt(bool n) { printf(" I'm a bool %dn", n); }
void checkit(long n) { printf(" I'm a long %ldn", n); }
void checkit(int n ) { printf(" I'm a int %dn", n); }
};
int main(int argc, char *argv[])
{
Overload obj;
int i = 10;
bool b = true;
printf("should be intn");
obj.checkIt(i);
printf("should be booln");
obj.checkIt(b);
printf("should also be booln");
obj.checkit( (i == 10) );
}
编辑
du!对不起,错字。
但是,在固定错字和评论布尔方法 之后,用bool谓词调用int方法。如果找不到更合适的签名,是否可以从布尔到int进行默认转换?严格来说,没有bool
签名,所以我期望编译或运行时错误...
更新的代码
class Overload
{
public:
//void checkIt(bool n) { printf(" I'm a bool %dn", n); }
void checkIt(long n) { printf(" I'm a long %ldn", n); }
void checkIt(int n ) { printf(" I'm a int %dn", n); }
};
int main(int argc, char *argv[])
{
Overload obj;
int i = 10;
bool b = true;
printf("should be intn");
obj.checkIt(i);
printf("should be booln");
obj.checkIt(b);
printf("should also be booln");
obj.checkIt( (i == 10) );
}
更新的输出
should be int
I'm a int 10
should be bool
I'm a int 1
should also be bool
I'm a int 1
checkIt
不会超载;只有bool
版本。
checkit
被重载;有一个long
和int
版本。
您的代码调用checkIt
两次,checkit
一次。
请记住,C 中的功能名称(几乎所有其他(都是案例敏感的。
在您的更新代码中,有2种checkIt
方法,一种用于int
类型,一种用于long
类型。您将checkIt
调用3次,最后2次将其传递给该方法为bool
值。在C bool
中值自动将true == 1
和false == 0
int
bool a = 1 // equals to true
bool b = 0 // equals to false
由于没有接受" bool"类型的方法,该值会自动施放到int
并调用int
方法。
是的c 使用隐式转换。bool,char自动转换为int/short/short/long或vice。反之亦然。
相关文章:
- C++模板类 - 继承调用错误的函数
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 使用 std::find 时没有匹配的函数调用错误
- 使用成员初始值设定项列表时没有匹配的函数调用错误
- C++调用错误签名的函数
- C++ 类成员调用错误 C3861
- C bool表达式作为函数参数调用错误的超载
- C ++尝试访问映射中的元素会给我一个不匹配的函数调用错误
- 当提供巨大的输入时,中止在堆栈操作程序中调用错误
- C++类静态成员函数调用错误
- 如何调查随机安卓原生函数调用错误?
- 引发实例后终止调用 - C++错误
- 如何修复传递参数时调用错误函数的主函数?(C++)
- 没有用于调用错误的匹配函数.将字符串推送到向量中
- 从括号内的initializer_list构造时,将调用错误的过载
- 为什么初始值设定项列表中的元素数会导致不明确的调用错误
- VC 15调用错误的复制构造函数以捕获lambda
- 在 C++ 中没有针对调用错误的匹配函数
- C++:函数调用错误:标识符"name"未定义,如果已定义?
- 为什么 GCC 在显式指定模板参数时会产生奇怪的错误并尝试调用错误的方法?