このコードを見てみましょう。 私はC++関数がeaxのint値だけを返すと考えていました。 ベクトル結果はどこに格納されますか?ヒープ?スタック?ここで、C++関数は戻り値を置きます
おかげ
#include <iostream>
#include <vector>
using namespace std;
vector<int> fonction(int a)
{
vector<int> vec;
for (int i=0;i<a;i++)
{
vec.push_back(1);
}
return vec;
}
int main(int argc, char *argv[])
{
cout << "test" << endl;
auto res = fonction(10);
cout << res.size() << endl;
return 0;
}
C++ 11 +では、 'function'の戻りベクトルは' res'にmove-constructされます。 – MrTux
戻り値の格納に使用されるレジスタは、C++の属性ではなく、実行しているアーキテクチャです。 – Attie
はコンパイラによって異なります。現代のコンパイラはコピーを保存するために "コピーエリジョン"を実行します。彼らは 'res'変数に直接値を割り当てます。 –