如果您有以下功能:
static const map<ushort, ulong> MakeMap()
{
map<ushort, ulong> mymap;
for(int i=0; i<myTableSize; i++)
{
mymap[myTable[i].x] = myTable[i].y;
}
return mymap;
}
在某个地方使用你:
static const map<ushort, ulong> numMap = MakeMap();
编译器实际上会将numMap设置为从MakeMap返回的地址,还是会实际制作地图的副本?另外,这样做是否安全?
感谢您的反馈!
答案 0 :(得分:4)
返回类型不是static const map<ushort, ulong>
。这只是const map<ushort, ulong>
。关键字static
适用于该功能。也就是说,它是静态的函数,这意味着函数具有internal linkage * ,并且不能从其他translation unit * 调用。
*浏览链接以了解它们。
现在回到你的问题,首先,返回类型中的const
没有意义。以下是更好的:
//remove the static also if you don't want it to have internal linkage
static map<ushort, ulong> MakeMap();
然后你仍然可以写:
const map<ushort, ulong> numMap = MakeMap();
如果您使用的是良好的编译器,那么很可能它会优化返回值。阅读:
答案 1 :(得分:0)
是的,这样做是安全的。出于大多数实际目的,代码的行为就像复制一样(优秀的编译器may eliminate the need for an actual copy)。
另外,正如其他人所指出的,static
不是返回类型的一部分。代码中static
的两种用法具有不同的含义。
答案 2 :(得分:0)
您的函数不会返回一个地址,而是返回将被复制的对象,这样做是安全的。如果修改代码使MakeMap返回一个地址,那么mymapy将在某些时候被销毁(取决于编译选项和编译器),因此会崩溃。你必须在堆上分配mymap(使用new),然后销毁它等等....