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.至于如何解决您的问题:只要您没有实现私有过载,您的方法对于公共和非公共调用方都可以正常工作.在这种情况下,公共调用者将收到编译错误,成员调用者将收到链接器错误.
但是,您可能还想考虑其他事项.
你的函数是否需要接受空指针?如果没有,请将其更改为通过引用接受而问题就会消失.
如果你的函数确实需要接受空指针那么我建议在这种情况下只是相信你的用户正确调用它而不是混乱你的界面试图防止每一个可能的误用.
总结以上是内存溢出为你收集整理的c – 防止从false到指针的无声转换全部内容,希望文章能够帮你解决c – 防止从false到指针的无声转换所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)