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
其实是对i
和j
的逗号表达式,返回的是j
。C++兼容了C(至少是旧标准),因此得另辟蹊径简化代码。