- 主题:粗大,const char *可自动转成bool
Foo::Foo(const std::string& a, bool b=false);
Foo::Foo(bool);
Foo x("x");
然后各种不正常,加打印也没显示。
最后把第一个构造函数删了,编译没报错。
然后再测试
bool z = "aaa";
竟然也不报错。
这泥马太坑人了吧。
--
修改:prc79 FROM 117.136.0.*
FROM 123.151.77.*
没啥出大,规范里就是这么定的。有点坑人。谷歌搜一下,大把的supprising(粗大)
https://www.bfilipek.com/2019/07/surprising-conversions-char-bool.html
--
修改:z16166 FROM 123.118.67.*
FROM 123.118.67.*
Void * p;
if(p) { blabla……}
这种写法都几百年了吧。
【 在 prc79 的大作中提到: 】
:
: Foo::Foo(const std::string& a, bool b=false);
: Foo::Foo(bool);
:
: Foo x("x");
--
FROM 114.242.248.*
因为这个隐式转bool的overload优先。上面那个链接里有讲。
【 在 prc79 的大作中提到: 】
: 即便如此,两个构造函数都满足x("x"),编译器为啥不confused。
: :
--
修改:z16166 FROM 123.118.67.*
FROM 123.118.67.*
是的,所以G厂编码规范不鼓励函数重载/缺省参数
【 在 prc79 的大作中提到: 】
:
: Foo::Foo(const std::string& a, bool b=false);
: Foo::Foo(bool);
:
: Foo x("x");
: 然后各种不正常,加打印也没显示。
: 最后把第一个构造函数删了,编译没保存。
:
: 然后再测试
: bool z = "aaa";
: 竟然也不报错。
: 这泥马太坑人了吧。
: --
:
发自「今日水木 on 钛星」
--
FROM 114.250.142.*
-Wall了吗?
【 在 prc79 () 的大作中提到: 】
: Foo::Foo(const std::string& a, bool b=false);
: Foo::Foo(bool);
:
: Foo x("x");
--
FROM 124.217.188.*
编译没保存是啥意思
【 在 prc79 (PRC) 的大作中提到: 】
: Foo::Foo(const std::string& a, bool b=false);
: Foo::Foo(bool);
: Foo x("x");
: ...................
--
FROM 171.83.9.*
-Wall不管用。
【 在 fanci 的大作中提到: 】
: -Wall了吗?
--
FROM 18.179.39.*