Не должно ли безымянное возвращаемое значение из GetPerson привязаться к конструктору перемещения?
person.hpp
#ifndef PERSON_H
#define PERSON_H
#include <string>
struct Person {
Person(std::string name, int age) : name(name), age(age) {
std::cout << "ctor" << std::endl;
}
Person(const Person& rhs) : name(rhs.name), age(rhs.age) {
std::cout << "copy ctor" << std::endl;
}
Person(Person&& rhs) : name(std::move(rhs.name)), age(std::move(rhs.age)) {
std::cout << "move ctor" << std::endl;
}
~Person() {
std::cout << "dtor" << std::endl;
}
std::string name;
int age;
};
#endif
main.cpp
#include <iostream>
#include "person.hpp"
Person GetPerson(std::string name, int age) {
return Person(name, age);
}
int main(int argc, char* argv[]) {
Person p(GetPerson("X", 21));
}
Я использую gcc версии 4.4.3 (Ubuntu 4.4.3-4ubuntu5) и компилирую с:
gcc -g -x c++ -lstdc++ -std=c++0x -o main ./main.cpp
Является ли RVO или NRVO причиной?