小编use*_*170的帖子

C++20 标准 (N4860) 中哪里规定内联函数必须在翻译单元中使用之前定义?

[dcl.constexpr]/1 :

说明constexpr符仅应用于变量或变量模板的定义或者函数或函数模板的声明。说明consteval符仅适用于函数或函数模板的声明。constexpr使用or说明符声明的函数或静态数据成员consteval隐式是内联函数或变量 ([dcl.inline])。如果函数或函数模板的任何声明具有constexprconsteval说明符,则其所有声明都应包含相同的说明符。

实施例1

constexpr void square(int &x);  // OK, declaration
constexpr int bufsz = 1024;     // OK, definition
constexpr struct pixel {        // error: pixel is a type
  int x;
  int y;
  constexpr pixel(int);         // OK, declaration
};
constexpr pixel::pixel(int a)
  : x(a), y(x)                  // OK, definition
  { square(x); }
constexpr pixel small(2);       // error: square not defined, so small(2) <<<<<<<<<<<<<<<<<<<<
                                // not constant ([expr.const]) so …
Run Code Online (Sandbox Code Playgroud)

c++ inline c++20 constexpr-function

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

为什么这个程序在结果中打印421?

我不明白,为什么这个程序打印421而不是431

package main

import "fmt"

var x int
func f() int {
    x++
    return x
}

func main() {
    o := fmt.Println

    defer o(f())
    defer func() {
        defer o(recover())
        o(f())
    }()

    defer f()
    defer recover()

    panic(f())
}
Run Code Online (Sandbox Code Playgroud)

下面我添加了我猜测的评论:

package main

import "fmt"

var x int
func f() int {
    x++
    return x
}

func main() {
    o := fmt.Println

    defer o(f()) // x=1
    defer func() {
        defer o(recover()) // x=3 from panic (but if we ll …
Run Code Online (Sandbox Code Playgroud)

go panic defer-keyword

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

如何防止从树中删除的 DOM 节点被虚假的强引用(例如闭包)所持有?

对于一个玩具示例,假设我有一个时钟小部件:

\n

\r\n
\r\n
{\n  const clockElem = document.getElementById(\'clock\');\n\n  const timefmt = new Intl.DateTimeFormat(\n    \'default\', { timeStyle: \'medium\', });\n\n  setInterval(() => {\n    const d = new Date;\n    console.log(\'tick\', d, clockElem);\n    clockElem.querySelector(\'p\').innerHTML =\n      timefmt.format(d);\n  }, 1000);\n\n  clockElem.querySelector(\'button\')\n    .addEventListener(\'click\', ev => {\n      clockElem.remove();\n    });\n}
Run Code Online (Sandbox Code Playgroud)\r\n
<div id="clock">\n  <button>Remove</button>\n  <p></p>\n</div>
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

当我单击按钮删除时钟时,setInterval回调仍然被调用。回调闭包强力持有 DOM 节点,这意味着它的资源无法被释放。还有来自按钮事件处理程序的循环引用;尽管也许这个可以由 engine\xe2\x80\x99s 循环收集器处理。话又说回来,也许不是。

\n

不用担心:我可以创建一个辅助函数,确保闭包仅通过弱引用保存 DOM 节点,并抛出FinalizationRegistry来清理计时器。

\n

\r\n
\r\n
const weakCapture = (captures, func) => {\n  captures = captures.map(o => new WeakRef(o));\n …
Run Code Online (Sandbox Code Playgroud)

javascript dom closures weak-references

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

如何滚动查看 DOM 范围?

Element接口提供了一种scrollIntoView设置所有祖先元素的滚动位置的方法,以便给定元素在屏幕上可见。

如何使用 DOM 执行类似的操作Range,也就是说,滚动需要滚动的任何内容,以便该范围在屏幕上可见?

我可能可以忍受手动计算范围的边界框并查找要滚动的元素,但我不希望以任何方式修改 DOM 的内容。

javascript dom js-scrollintoview

-26
推荐指数
1
解决办法
942
查看次数