关于c++ pair自己遇到的一个问题?为何不一样?为何第一个程序不能返回pair内数组的值呢?(已经解决)
生活随笔
收集整理的這篇文章主要介紹了
关于c++ pair自己遇到的一个问题?为何不一样?为何第一个程序不能返回pair内数组的值呢?(已经解决)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
#include <string>
#include <iostream>
#include <memory>
using namespace std;
pair<int *,int *> ptr()
{
//這兩個數(shù)組都定義成static的就可以了
int p1[3]={123,2,3};
int p2[3]={1234,1,2};return make_pair(p1,p2);
}
int main()
{
pair<int*,int*> p = ptr();
int *p1 = p.first;
int *p2 = p.second;
for(int i = 0; i != 3; ++i)cout << p1[i] << endl;
for(int j = 0; j != 3; ++j)cout << p2[j] << endl;return 0;
}
運行結(jié)果是:?
123 22033 -588110800 22033 1703825584 32765后來發(fā)現(xiàn),如果把函數(shù)ptr中的兩個數(shù)組都定義稱為static就沒事了,因為這兩個數(shù)組p1和p2都是局部臨時量,當函數(shù)運行完畢后,返回p1和p2的pair,但是p1、p2所指向的數(shù)組早就被銷毀了。所以打印出來的值早就不存在了。這就是為何不能返回臨時量。
#include <string> #include <iostream> #include <memory> using namespace std; int main() { int p1[3] = {1,2,3}; int p2[3] = {11,22,33}; pair<int*,int*> ptr = make_pair(p1,p2);int *qq1 = ptr.first; int *qq2 = ptr.second;int *q = p1;for(int i = 0; i != 3;++i) cout << qq1[i] << endl;for(int j = 0;j != 3; ++j)cout << qq2[j] << endl; return 0; }運行結(jié)果是:
1 2 3 11 22 33總結(jié)
以上是生活随笔為你收集整理的关于c++ pair自己遇到的一个问题?为何不一样?为何第一个程序不能返回pair内数组的值呢?(已经解决)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。