language-design 相关问题

与编程语言的任何方面的设计相关的问题的标签。

在 C++ 中使用 enum 代替 struct 进行标签调度

让我们从标准库中实现 std::unique_lock : struct defer_lock_t { 显式 defer_lock_t() = 默认; }; struct try_to_lock_t { 显式 try_to_lock_t() = 默认; };

回答 2 投票 0

为什么不带 undef 的宏重定义会导致程序格式错误

按照标准,在没有使用#undef之前禁止宏重定义: 但以下重新定义无效: #define OBJ_LIKE (0) // 不同的标记序列 #定义

回答 2 投票 0

NAN 框负整数

我一直在关注这篇文章,它解释了 nan boxing https://piotrduperas.com/posts/nan-boxing 并尝试用我自己的“语言”来实现它。 类型定义联合{ uint64_t as_uin...

回答 1 投票 0

为什么C++没有幂运算符?

我正在上 C++ 课程,我注意到只有几个数学运算符可供使用。 我还注意到 C++ 的数学库中没有指数运算符。 为什么必须总是

回答 4 投票 0

为什么默认构造函数和具有 2 个或更多(非默认)参数的构造函数是显式允许的?

我知道带有一个(非默认)参数的构造函数就像隐式转换器,它从该参数类型转换为类类型。然而,显式可用于限定任何

回答 5 投票 0

寻找能让你改变真假的编程语言

出于好奇,我正在寻找一种动态的面向对象语言,它允许您将 true 更改为 false,反之亦然。 像这样的东西: 真=假,假=真; 这也应该

回答 8 投票 0

我可以在 F# 中定义类型级自然数,然后在 C# 中使用它们吗?

在之前的一个问题中,我想知道 C# 中是否有某种方法可以将矩阵维数实现为类型级属性。也就是说,我希望能够声明一个通用的类族......

回答 1 投票 0

在 C# 中定义无限类“MatrixMxN”

假设我正在用 C# 编写一个线性代数库,并且我想实现矩阵乘法。当然,两个矩阵 A 和 B 只能相乘形成 AB,前提是 A 的列数与 ...

回答 1 投票 0

引导编译器所需的语言功能的最小子集是什么? [已关闭]

一种语言(受 C 启发)作为一种子语言,可以用来为整个语言编写编译器,绝对必要的核心特性是什么?

回答 3 投票 0

C++ 中没有静态构造函数的理由是什么?

C++ 中没有静态构造函数的理由是什么? 如果允许的话,我们将以一种非常有组织的方式在一个地方初始化其中的所有静态成员,如下所示: //非法C++ ...

回答 6 投票 0

为什么 std::Optional 不使用哨兵值来表示空可选?

我知道这艘船已经航行,因为它需要 ABI 损坏,但我想知道为什么最初的实现没有决定对 std::string、std::vector 等使用一些神奇的位模式...到 si。 ..

回答 1 投票 0

哪些编程语言不将 if 视为语法?

其中编程语言是条件块(if),在语法上与函数调用没有不同,包括在错误条件下执行的任何“else”代码块...

回答 1 投票 0

为什么基于范围的for语句要通过auto&&来取范围?

基于范围的 for 语句在第 6.5.4 节中定义为等效于: { 自动 && __range = range-init; for ( auto __begin = 开始表达式, __end = 结束表达式; __开始!=...

回答 1 投票 0

为什么空语句合法?

int main() { int var = 0;; // 拼写错误,编译得很好 } 在 C 和 C++ 中,这是允许的,因为表达式语句可能只是一个 ;,这使其成为“空语句”。 W...

回答 11 投票 0

为什么没有 std::shared_ptr<T[]> 专业化?

该标准提供了 std::unique_ptr 的模板特化,它可以从其析构函数中正确调用delete[]: 无效函数() { std::unique_ptr< int[] > arr(new int[10]); ......

回答 1 投票 0

为什么不再允许从数组的 unique_ptr 创建shared_ptr?

来自 cppreference: 在 C++11 和 C++14 中,构造 std::shared_ptr 是有效的 std::unique_ptr: std::unique_ptr arr(new int[1]); std::shared_ptr 来自cppreference: 在 C++11 和 C++14 中,从以下位置构造 std::shared_ptr<T> 是有效的 std::unique_ptr<T[]>: std::unique_ptr<int[]> arr(new int[1]); std::shared_ptr<int> ptr(std::move(arr)); 由于 shared_ptr 获得了它的删除器(a std::default_delete<T[]> 对象)来自 unique_ptr,数组将 被正确地释放。 C++17 中不再允许这样做。而是数组形式 应该使用std::shared_ptr<T[]>。 为什么C++17中不允许这样?发生了什么变化? p0497r0: 从 unique_ptr 构建共享指针的约束不正确 [...] 根据实施经验,我认为正确的形式是:         备注: 除非 Y* 与 T* 兼容且 unique_ptr<Y, D>::pointer 可转换为 element_type*,否则此构造函数不应参与重载决策。 “兼容”检查可防止从 unique_ptr<T[]> 到 shared_ptr<T> 的不良转换,“可转换为”检查可确保 unique_ptr<Y, D>::get() 的结果可以存储在 shared_ptr 中并由 shared_ptr<T>::get() 返回。 换句话说,故意使其无效只是因为它不应该有效,而不仅仅是其他更改的副作用。 这对我来说很有意义。 shared_ptr<T> 很可能被其他程序员解读为仅指向一个 T 对象。要求程序员在需要多个 shared_ptr<T[]> 对象时使用 T 会导致代码更具可读性。 注意:标准中没有这个正确的形式。然而,其基本原理部分是对标准内容的评论。

回答 1 投票 0

无壳开关

今天,我无意中发现我的编译器在没有 case 的 switch 语句中编写代码时不会抱怨。 (它确实抱怨缺少 case 语句,但是添加后...

回答 3 投票 0

uint32_t 代表什么?

我期望 uint32 表示“无符号 32 位整数”。 t 代表什么?

回答 2 投票 0

为什么 void main() 没有标准化为 main 函数的有效签名?

为什么在 C++ 中将入口点的返回类型设置为 void 总是不被鼓励,后来被标准删除并被现代编译器禁止?为什么它被认为是不好的做法?...

回答 4 投票 0

为什么不允许调用main函数?

C++03 3.6.1.3:程序中不得使用 main 函数 (3.2)。 ... 我想知道为什么这条规则存在...是否有人知道任何系统/实现,如果 main 是

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.