c – 防止从false到指针的无声转换
发布时间:2020-12-16 04:56:05 所属栏目:百科 来源:网络整理
导读:我有一个功能 void foo(int *bar){} 如果我像这样调用foo,Visual Studio 2012现在将很乐意并且没有警告编译: int main(){ foo(false); return 0;} 但是,如果我将foo(false)更改为foo(true),则会出现错误: 1main.cpp(132): error C2664: 'foo' : cannot con
我有一个功能
void foo(int *bar) {} 如果我像这样调用foo,Visual Studio 2012现在将很乐意并且没有警告编译: int main() { foo(false); return 0; } 但是,如果我将foo(false)更改为foo(true),则会出现错误: 1>main.cpp(132): error C2664: 'foo' : cannot convert parameter 1 from 'bool' to 'int *' 1> Conversion from integral type to pointer type requires reinterpret_cast,C-style cast or function-style cast 知道如何确保在传递false时我也会收到错误吗?我唯一的想法是添加第二个私有函数“void foo(bool bar)”.然后我确实得到了所谓的错误,声明foo(bool bar)是私有的.但这只适用于从类外部调用foo并且它使我的界面混乱的情况. 解决方法
首先,关于为什么它接受false而不是true:文字false将被解释为整数0,文字0将转换为任何类型的空指针.另一方面,true无法转换为指针类型,因为它转换为整数1.
至于如何解决您的问题:只要您没有实现私有过载,您的方法对于公共和非公共调用方都可以正常工作.在这种情况下,公共调用者将收到编译错误,成员调用者将收到链接器错误. 但是,您可能还想考虑其他事项. 你的函数是否需要接受空指针?如果没有,请将其更改为通过引用接受而问题就会消失. 如果你的函数确实需要接受空指针那么我建议在这种情况下只是相信你的用户正确调用它而不是混乱你的界面试图防止每一个可能的误用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- wince 能用的 Newtonsoft.Json(Json.Net)
- Oracle 大小写转换函数实例详解
- Persistence.xml 配置说明
- objective-c – 在UIWebView中为textfield设置文本
- 如果有机会在Sencha Touch 2 Apps中使用SQLite?
- Cocos2dx 3.10使用using namespace CocosDenshion;错误提示
- JsonObject和JsonArray的区别
- c# – 如何使用管理员权限打开Visual Studio代码以使已安装
- ruby-on-rails – 使用Minitest,需要’minitest_helper’加
- heredoc里面的Ruby语法?