最近引入了方法的重载,应用程序开始失败.最后跟踪它,新的方法被调用,我没想到它.
我们有
setValue( const std::wstring& name, const std::wstring& value );
std::wstring avalue( func() );
setValue( L"string", avalue );
std::wstring bvalue( func2() ? L"true", L"false" );
setValue( L"bool", bvalue );
setValue( L"empty", L"" );
Run Code Online (Sandbox Code Playgroud)
它被更改为当存储bool值时我们使用相同的字符串(字符串的内部数据存储)
setValue( const std::wstring& name, const std::wstring& value );
setValue( const std::wstring& name, const bool& value );
std::wstring avalue( func() );
setValue( L"string", avalue );
setValue( L"bool", func2() );
setValue( L"empty", L"" ); << --- this FAILS!?!
Run Code Online (Sandbox Code Playgroud)
L""的问题在于它是隐式转换,之前它很高兴成为std :: wstring,但它不喜欢是bool.MSVC编译器没有抱怨或提出警告,所以我担心即使我"修复"了setValue(L"空",L""); 成为
setValue( L"empty", std::wstring() );
Run Code Online (Sandbox Code Playgroud)
别人可能会稍后来,只需使用setValue(L"空",L""); 并且必须再次追踪这个问题. …
我要求用户输入整数,我不想执行代码,除非它是严格的整数.
int x;
if(cin >> x)
Run Code Online (Sandbox Code Playgroud)
例如,如果用户输入上面的double,则if语句将执行,并隐式转换为整数.相反,我根本不希望代码执行.
我怎么能阻止这个?