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

  • 相关阅读:
    MFC TeeChart 用法整理二 (画二维图)
    CFileFind类的详解以及应用实例
    error C2065: 'AfxCriticalTerm' : undeclared identifier 解决办法
    error LNK2001
    ShellExecute详细用法(可以单独打开一个文件)
    java连接SQL Server数据库
    Java 异常处理
    eclipse 无法自动匹配
    Java简单的表格模型
    Java 字符串常用操作(String类)
  • 原文地址:https://www.cnblogs.com/SophieWang-cmu/p/12832764.html
Copyright © 2020-2023  润新知