问题标签 [c++23]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
103 浏览

c++ - 为什么 std::expected 中没有单子操作?

在 C++23 中,采用了单子操作 in std::optional,后来又采用了std::expected. 为什么像and_then,transform和之类的单子操作or_else没有包含在主要论文中?

0 投票
1 回答
207 浏览

c++ - 为什么会有 const 赋值运算符

使用 C++23 将有

对我来说,对 const 对象进行操作的赋值运算符没有任何意义,因为无法修改对象。为什么 C++23 会在 pair 上有这个操作符?更令人困惑的是,还有:

[编辑]:这行不通,因为 this 指向的是 const:

那么为什么会有一个带有 const 限定的赋值运算符 pair 呢?

0 投票
1 回答
81 浏览

c++ - 显式对象参数是否允许可转换类型?

来自提案的§4.2.7 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0847r7.html#pathological-cases

它说:

这些更不可能是真正有用的代码。在此示例中,B既不能转换为A也不能int,因此这些函数都不能使用正常的成员语法调用。但是,您可以获取指向此类函数的指针并通过该指针调用它们。(&B::bar)(42)是有效的,如果奇怪,打电话。

但是,它没有指定标准是否不允许显式的自我类型的对象参数隐式转换为特定的另一种类型。

这是否意味着:

将工作?

在另一种情况下,这里是一个 lambda。因为 lambda 的类型是不可言说的并且总是依赖的。上面的案例呢?(这个无捕获的 lambda 可以转换为int(*)(int, int, int)

鉴于:

非成员函数、静态成员函数和显式对象成员函数匹配函数指针类型的目标或对函数类型的引用。非静态隐式对象成员函数匹配指向成员函数类型的目标。([over.match.viable] §12.2.3)

在所有上下文中,当转换为隐式对象参数或转换为赋值操作的左操作数时,仅允许标准转换序列。[注意:当转换为显式对象参数时,如果有的话,用户定义的转换序列是允许的。- 尾注]([over.best.ics] §12.2.4.2)

0 投票
1 回答
78 浏览

c++ - 朋友注射会不会畸形?

标准中曾经有一段规定

除非在命名空间范围内显式声明,否则类模板特化的命名空间范围友元函数的名称在普通查找期间不可见。这些名称可以在关联类下找到。

此功能已用于在编译时捕获和检索元编程状态。

据我所知,CWG 提出了一个问题,旨在使此类行为不正常,尽管禁止此类行为的机制尚未确定。但是,由于最新草案中似乎没有该段落,我想知道朋友注入在 C++23 中是否格式不正确。