gpt4 book ai didi

c++ - 返回对临时、常量差异的引用

转载 作者:行者123 更新时间:2023-11-30 02:55:53 25 4
gpt4 key购买 nike

当以下代码由 g++ 或 clang++ 编译时,我收到警告“返回对临时对象的引用”(g++) 和“返回对本地临时对象的引用”(clang++)。

有人能告诉我为什么 getData_warning 会显示这些警告,而 getData_nowarning 不会吗?

struct Geom {
int * data;
};


// Not ideal because one can change the pointed to value
int * const & getData_nowarning (Geom const & geom) {
return geom.data;
}


// Ideal because one cannot change the pointed to value.
int const * const & getData_warning (Geom const & geom) {
return geom.data; // <------------------- WARNING HERE
}


void test () {
Geom const geom = { new int(0) };

int * data1 = getData_nowarning(geom);

int const * data2 = getData_warning(geom);
}

最佳答案

因为geom.data的类型是int*,所以不能用int const*的引用来引用它。为了引用一个int const*,首先你需要一个int const*。所以必须有转换,所以必须创建新类型的新指针,所以它必须是临时的。

您是否需要函数的调用者能够更改 geom 对象中的指针指向的内容?似乎不是,因为您正在使指针本身为常量。所以只要删除引用,你就可以保留常量。

关于c++ - 返回对临时、常量差异的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16094377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com