C++ {}语法的困惑,作为返回值的时候应该怎么理解呢?

在做Leetcode的时候遇到的一个问题

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

 示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

来源:力扣(LeetCode)
其中的答案是这么写的

 1 class Solution {
 2 public:
 3     vector<int> twoSum(vector<int>& nums, int target) {
 4         int len=nums.size();
 5 
 6         for(int i=0;i<len-1;i++)
 7         for(int j=i+1;j<len;j++)
 8         {
 9             if(nums[i]+nums[j] == target)
10             return {i,j};
11         }
12         
13        return {};
14     }
15 };

其中return用的是大括号!

这个用法我从来没见过,于是上网查找到了一个比较好的答案:

只要构造函数不是explicit的,就可以在newInteger中调用return i而非return Integer(i)这种复杂的表达。

但是假如现在有个新类型IntPair,其构造函数有2个int呢?那么只能乖乖的return IntPair(i, j)来返回了,有了列表初始化后就可以直接return {i, j}了。

至于为什么不弄个像return i, j或者return (i, j)这样的语法? 因为在C语言存在逗号表达式,也就是说i,j其实是对ij的逗号表达式,返回的是j。C++兼容了C(至少是旧标准),因此得另辟蹊径简化代码。

原文链接: https://www.cnblogs.com/SophieWang-cmu/p/12832764.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++ {}语法的困惑,作为返回值的时候应该怎么理解呢?

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/346438

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午3:53
下一篇 2023年3月2日 上午3:54

相关推荐