C++ 无法推断';的模板参数;常量std::反向迭代器<_拉尼特>&';从';std::string';
当我在visual studio中编写这样的代码时:C++ 无法推断';的模板参数;常量std::反向迭代器<_拉尼特>&';从';std::string';,c++,string,visual-studio,C++,String,Visual Studio,当我在visual studio中编写这样的代码时: void aaa() { std::string a = " "; std::string b = ""; b += 1.0f + a; } 为什么我会收到这样的错误?std::reverse_iterator来自哪里 错误C2784:'std::reverse_iterator std::operator+(reverse_iterator::difference_type,const std::reverse_i
void aaa()
{
std::string a = " ";
std::string b = "";
b += 1.0f + a;
}
为什么我会收到这样的错误?std::reverse_iterator
来自哪里
错误C2784:'std::reverse_iterator std::operator+(reverse_iterator::difference_type,const std::reverse_iterator&'):无法从'std::string'推断'const std::reverse_iterator&'的模板参数
事实上,这是一条来自Microsoft编译器的预期错误消息 之所以会出现这种情况,是因为您包含了
标题,它为不同的迭代器定义了一些运算符+
模板:
// reverse_iterator TEMPLATE OPERATORS
template<class _RanIt> inline
reverse_iterator<_RanIt> operator+(
typename reverse_iterator<_RanIt>::difference_type _Off,
const reverse_iterator<_RanIt>& _Right)
{ // return reverse_iterator + integer
return (_Right + _Off);
}
事实上,这是一条来自Microsoft编译器的预期错误消息 之所以会出现这种情况,是因为您包含了
标题,它为不同的迭代器定义了一些运算符+
模板:
// reverse_iterator TEMPLATE OPERATORS
template<class _RanIt> inline
reverse_iterator<_RanIt> operator+(
typename reverse_iterator<_RanIt>::difference_type _Off,
const reverse_iterator<_RanIt>& _Right)
{ // return reverse_iterator + integer
return (_Right + _Off);
}
什么是
1.0f
?@RoiHatam这就是你写floats的方式这是我愚蠢的错误。我忘了对数字使用std::to_string
。编译器可能尝试了多次自动转换,这将导致一个正常的结果,这是它放弃之前最后一次尝试。你写过b+=1+”代码>那么它就会找到一个,而不会给你一个错误。什么是1.0f
?@RoiHatam这就是你写floats的方式这是我愚蠢的错误。我忘了对数字使用std::to_string
。编译器可能尝试了多次自动转换,这将导致一个正常的结果,这是它放弃之前最后一次尝试。你写过b+=1+”代码>然后它会找到一个,不会给你一个错误。非常感谢Pavel。我想知道为什么C++对定义这样的操作符是严格的。因为它在C++中有点笨拙,不清楚浮点+字符串应该做什么。你应该这样做:<代码> STD::toShist[1.0f ] +A/<代码> @ FK KEN White,我假设C++没有定义它,因为在JavaScript之类的语言中发生了什么,允许在其中添加“字符串”和“数字”。“10”+2
等于什么<代码>“102”
或12
?当然,如果你知道规则,你可以找出它,但最好是明确的,以便阅读C++代码的人不必猜测你的意思。这是开发人员损失最多的时间——试图弄清楚作者的意图。省略这些运算符会迫使您明确自己的意图。@cdhowie正是。非常感谢Pavel。我想知道为什么C++对定义这样的操作符是严格的。因为它在C++中有点笨拙,不清楚浮点+字符串应该做什么。你应该这样做:<代码> STD::toShist[1.0f ] +A/<代码> @ FK KEN White,我假设C++没有定义它,因为在JavaScript之类的语言中发生了什么,允许在其中添加“字符串”和“数字”。“10”+2
等于什么<代码>“102”
或12
?当然,如果你知道规则,你可以找出它,但最好是明确的,以便阅读C++代码的人不必猜测你的意思。这是开发人员损失最多的时间——试图弄清楚作者的意图。省略这些运算符将迫使您明确自己的意图。@cdhowie完全正确。