相关疑难解决方法(0)

为什么编译器选择bool over string进行L""的隐式类型转换?

最近引入了方法的重载,应用程序开始失败.最后跟踪它,新的方法被调用,我没想到它.

我们有

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""); 并且必须再次追踪这个问题. …

c++ explicit implicit visual-c++

11
推荐指数
2
解决办法
2688
查看次数

防止C++中的隐式转换

我要求用户输入整数,我不想执行代码,除非它是严格的整数.

int x;
if(cin >> x)
Run Code Online (Sandbox Code Playgroud)

例如,如果用户输入上面的double,则if语句将执行,并隐式转换为整数.相反,我根本不希望代码执行.

我怎么能阻止这个?

c++

4
推荐指数
1
解决办法
903
查看次数

标签 统计

c++ ×2

explicit ×1

implicit ×1

visual-c++ ×1