Я пытаюсь понять, как оператор присваивания знает, какой тип данных имеет правая сторона оператора назначения.Каков тип правой части оператора присваивания (строка)?
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>);
Какой из них вызывается?
Любое объяснение оценено!
'string x =" foo "' использует конструктор, а не оператор присваивания. – PaulMcKenzie
@PaulMcKenzie: Если вы посмотрите внутри класса 'string', мы обнаруживаем, что это шаблонный класс, который перегружает оператор' = 'следующим образом:' basic_string & operator = (const E * s); 'Where' s 'является указателем на общий тип. – Raindrop7
@ Raindrop7 Если код был 'string x; x = "foo"; ', тогда оператор присваивания вступает в игру. Однако 'string x =" foo ";' is construction, а не присвоение. – PaulMcKenzie