赋值运算符右侧的类型是什么(字符串)?

时间:2017-02-07 22:07:39

标签: c++ constructor operator-overloading

我试图了解赋值运算符如何知道赋值运算符右侧的数据类型。

string x = "foo"

这些是我在XCode Clang字符串文件中找到的签名。

basic_string& operator=(const basic_string& str);
basic_string& operator=(basic_string&& str)
    noexcept(
         allocator_type::propagate_on_container_move_assignment::value &&
         is_nothrow_move_assignable<allocator_type>::value);
basic_string& operator=(const value_type* s);
basic_string& operator=(value_type c);
basic_string& operator=(initializer_list<value_type>);

调用了哪一个?

任何解释都赞赏!

1 个答案:

答案 0 :(得分:2)

右侧有类型const char[4]和构造函数

string(const char* s, const Allocator& alloc = Allocator());
调用

const char[4]衰减为const char*。有关构造函数的完整列表,请参阅http://en.cppreference.com/w/cpp/string/basic_string/basic_string

请注意,T x = i;形式的初始化始终会调用构造函数,而不是赋值运算符。构造函数为对象提供其初始值,而赋值运算符则替换对象中已存在的值。