Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法推断';的模板参数;常量std::反向迭代器<_拉尼特>&';从';std::string';_C++_String_Visual Studio - Fatal编程技术网

C++ 无法推断';的模板参数;常量std::反向迭代器<_拉尼特>&';从';std::string';

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

当我在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_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完全正确。