有关编程语言和环境的正式或权威规范的复杂性的问题。
C++17 非静态 POD 类成员是否用大括号 {} 初始化并设置为 0?
收到代码审查评论,指出我的非静态类 POD 成员被设置为无效值。我同意初始值应该是无效的。对于我的情况,0 无效。这是一个例子: A级 { ...
从 & 运算符的典型用法来看,这听起来像是一个微不足道的问题,但是标准是否保证在尝试获取地址时,address-of-operator 不能返回 nullptr?
以下 Move 操作是否合法,因为没有 UB。 我想实现 16 字节 MyString 的一次交换,而不是两次交换。 类 MyString { std::size_t size_; 字符* str_...
当前的标准草案包含此内容(参见本段最后一句): “当函数参数包出现在非推导上下文 ([temp.deduct.type]) 中时,该包的类型...
我们都知道表达式 i++ + i++ 是未定义的行为。 但如果副作用发生在函数体中的引用上,这也是 UB 吗? 例如 : int f(int& i) { // 经过
使用 std::construct_at 进行复制来更改联合中的活动成员
可以使用 std::construct_at 复制前一个活动成员的值来更改联合中的活动成员吗? 这个最小的例子 #包括 constexpr int f() { 并集 U {
std::ranges::enumerate 可以枚举任何可能的有效 C++ 数组吗?
有一次我问 std::ranges::views::enumerate 是否使用错误的类型(long)在 GCC 上建立索引,但显然情况并非如此,因为 std::views::enumerate 被指定使用
C++ 销毁一个对象并在同一个变量中构造一个新对象是否有效?
我有一个包含某种类型 T 的对象的结构,我知道它有一个 noexcept 默认构造函数。 我想在我的结构上公开一个成员函数,用 ...
也就是说,你可以通过改变声明的顺序仍然拥有有效的程序,但结果不同。这个问题不是你是否可以将一个有效的程序变成无效的(你很明显......
使用 if (0) 跳过 switch 中的情况应该有效吗?
我有一种情况,我希望 C++ switch 语句中的两种情况都落入第三种情况。具体来说,第二种情况会变成第三种情况,而第一种......
如何在 C++11 中初始化包含 const 数据成员的联合
我在初始化包含 C++11 中 const 成员的联合时遇到问题。 在 C++20 中,通过使用指定的初始值设定项可以避免该问题。例子 : 联盟 my_union { 常量无效* ptr; ...
std::ranges::sort 不适用于非默认运算符<=>?
我有一种情况,结构类型需要非默认运算符<=> - 只是在定义对象顺序时并非所有字段都很重要。 结构A { 整数a; 整数b; // 订购时并不重要...
据我了解,第 16.6.2 条适用于 a 的直接初始化,它只考虑 A 的构造函数。 但代码编译得很好。 我缺少哪一部分导致用户定义
有两种情况: 您可以使用模板参数包并将其扩展为非类型模板参数的嵌套模板声明: 模板 结构外层{
考虑以下代码: #包括 #包括 联合大学 { std::string s; U() { 新(&s) std::string; } 无效集(std::string new_s) ...
在 C++20 中,概念包含是指一个概念是另一个概念的超集。 例如,在以下示例中,Fooable 包含 BetterFooable: 模板 概念...
我预计以下代码无法编译,但它确实编译了(游乐场): fn 主() { (0..3) .map(|i| { 结构体S{ v:使用, } S...
我仍在尝试理解 StructuredClassifier 上下文中的 /role 属性。如果我正确理解 {union} ,这意味着 /role 指定的集合中的所有元素都必须是 ele...
如果编译器可以在编译时推断出动态类型,那么对象的静态类型是否与动态类型一致?
[defns.dynamic.type] 读取 ⟨glvalue⟩ 泛左值引用的最派生对象的类型 据我了解,鉴于 结构体B{}; 结构体D:B{}; std::unique_ptr d ...
Clang 接受从别名内访问数据成员 d 模板 p,而 GCC 和 MSVC 拒绝它。这应该是 允许还是不允许?标准对此有何规定? 当访问 d indir 时...