gpt4 book ai didi

c++ - 从函数 : What is it compiled down to? 返回花括号初始化器列表

转载 作者:行者123 更新时间:2023-11-28 02:12:17 31 4
gpt4 key购买 nike

例如,这里有一小段代码。

#include <iostream>

struct coordinate {
int x, y;
};

coordinate shift(coordinate p, int offset) {
return {p.x + offset, p.y + offset};
}

int main(int argc, char *argv[]) {
coordinate p {1, 2};
coordinate p_s = shift(p, 3);
std::cout << "x: " << p_s.x << "\ty: " << p_s.y;
return 0;
}

在函数 shift 中,我们看到 return 语句似乎返回了一个初始化列表。

虽然我理解这在语义上意味着什么,但我想确认我是否理解它被编译成什么。

编译器是否将 shift 函数解释为这样?

shift(coordinate p, int offset) {
coordinate p_ {p.x + offset, p.y + offset};
return p_;
}

如果不是,那又如何呢?

感谢您的帮助。

最佳答案

它是相似的,尽管将等价写成构造函数表达式似乎更自然:

 return coordinate{p.x + offset, p.y + offset};

这很明显它只不过是语法糖。也就是说,它不返回初始化列表,而是返回使用花括号初始化列表语法构造的指定类型的新对象。

请注意,复制省略适用,因此当返回值分配给新构造的 coordinate 时,中间的 coordinate 将不会被构造(或者可能不会被构造,在旧的 c++ 版本中)。

关于c++ - 从函数 : What is it compiled down to? 返回花括号初始化器列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35243834/

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