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(至少是旧标准),因此得另辟蹊径简化代码。

posted @ 2020-05-05 21:10  顾小朝  阅读(285)  评论(0编辑  收藏  举报