小编Nit*_*gla的帖子

Kotlin 中何时生成支持字段?

引用 Kotlin文档中关于“支持属性”的内容。

如果属性使用至少一个访问器的默认实现,或者自定义访问器通过标识符引用它,则将为属性生成支持字段field

例如,在以下情况下将没有支持字段:

val isEmpty: Boolean
   get() = this.size == 0
Run Code Online (Sandbox Code Playgroud)

至少有一个访问器(setter)正在使用默认实现,那么为什么在上述情况下没有支持字段呢?

kotlin

2
推荐指数
1
解决办法
288
查看次数

在基于范围的 for 循环中使用结构化绑定声明

我正在尝试将两个std::map容器(例如std::map<int, int> foo, bar)合并到第三个容器std::map(例如std::map<int, int> foobar)中。

我知道我可以使用迭代器来实现这一点,如下所示:

    std::map<int, int>::iterator itr1 = foo.begin();
    std::map<int, int>::iterator itr2 = bar.begin();

    for (; itr1 != foo.end() && itr2 != bar.end(); ++itr1, ++itr2) 
    {
      foobar[itr1->first] += itr1->second;
      foobar[itr2->first] += itr2->second;
    }
Run Code Online (Sandbox Code Playgroud)

但是我如何使用基于范围的 for 循环(也许与结构化绑定声明结合使用)来实现相同的目的?

或者有没有更好的方法来组合这两个关联容器?

编辑:这个问题的预期答案应该采用两个容器(std::map此处)并将它们组合成一个联合/联合映射,其中键来自各自的关联容器,并且添加重复键的值。

示例: 如果给定std::map容器foobar是:

  std::map<int, int> foo = {{1, 10}, {2, 20}, {3, 30}};
  std::map<int, int> bar = {{3, 50}, {4, 60}};
Run Code Online (Sandbox Code Playgroud)

那么“foobar”应该是:

  std::map<int, int> …
Run Code Online (Sandbox Code Playgroud)

c++ for-loop c++17 structured-bindings

1
推荐指数
1
解决办法
3434
查看次数

当它不初始化任何东西时,为什么要使用初始化列表?

在这个片段中:

struct Result
{
    Result() : output1(){};
    int output1[100];
}
Run Code Online (Sandbox Code Playgroud)

有什么Result() : output1(){};作用?

我知道这: output1()是初始化列表,但为什么在它什么都不做的情况下还要提到它呢?

c++ struct

1
推荐指数
1
解决办法
87
查看次数

显式转换有多少级别?

代码片段#1

int n = 46341;
long long value = ((long long) (n * (n + 1))) / 2;
std::cout << value; // -1073716337 -- WRONG!
Run Code Online (Sandbox Code Playgroud)

代码片段#2

int n = 46341;
long long value = (long long)((long long)((long long)n * ((long long)n + 1))) / 2;
std::cout << value; // 1073767311 -- CORRECT!
Run Code Online (Sandbox Code Playgroud)

需要多少级显式转换才能产生所需的结果?

c++ casting literals implicit-conversion

1
推荐指数
1
解决办法
80
查看次数