Why does C++ allow an integer to be assigned to a string?

前端 未结 4 2111
长情又很酷
长情又很酷 2020-11-27 06:32

I encountered an interesting situation today in a program where I inadvertantly assigned an unsigned integer to a std::string. The VisualStudio C++ compiler did not give an

相关标签:
4条回答
  • 2020-11-27 07:05

    The std::string class has the following assignment operator defined:

    string& operator=( char ch );
    

    This operator is invoked by implicit conversion of unsigned int to char.

    In your third case, you are using an explicit constructor to instantiate a std::string, none of the available constructors can accept an unsigned int, or use implicit conversion from unsigned int:

    string();
    string( const string& s );
    string( size_type length, const char& ch );
    string( const char* str );
    string( const char* str, size_type length );
    string( const string& str, size_type index, size_type length );
    string( input_iterator start, input_iterator end );
    
    0 讨论(0)
  • 2020-11-27 07:08

    It is definitely operator=(char ch) call - my debugger stepped into that. And my MS VS 2005 compiles following without error.

    std::string my_string("");
    unsigned int my_number = 1234;
    my_string = my_number;
    my_string.operator=(my_number);
    
    0 讨论(0)
  • 2020-11-27 07:11

    Because string is assignable from char, and int is implicitly convertible to char.

    0 讨论(0)
  • 2020-11-27 07:24

    I can explain the first and third situations:

    my_string = 1234;
    

    This works because string has overridden operator=(char). You are actually assigning a character (with data overflow) into the string. I don't know why the second case results in a compile error. I tried the code with GCC and it does compile.

    std::string my_string(1234);
    

    will not work, because there is no string constructor that takes a char or int argument.

    0 讨论(0)
提交回复
热议问题