有关编程语言和环境的正式或权威规范的复杂性的问题。
为什么关键字 false 在 gcc C23 中不是整型常量表达式?
最新的 gcc 13.x (trunk) 给出了此代码的编译器错误 (gcc -std=c23): int* p = 假; 错误:使用类型“_Bool”初始化类型“int *”时出现不兼容的类型 这怎么可能是正确的呢? ...
我了解到一个类可以创建另一个类并且还可以充当它的朋友。然后我编写了以下程序,msvc 可以工作(编译),但 gcc 拒绝它。 结构体A{}; 结构B { 使用类型...
考虑: #包括 模板 结构体A { ~A() 需要(std::is_void_v); //~A() 需要(!std::is_void_v) = default; }; 模板结构 A...
为什么 fgets() 接受(有符号)int 作为其“count”参数?
标准函数 fgets 在即将发布的 C23 标准中是这样指定的: 7.23.7.2 fgets 函数 概要 #包括 char *fgets(char * 限制 s, int n, FILE *
标准函数 fgets 在即将发布的 C23 标准中是这样指定的: 7.23.7.2 fgets 函数 概要 #包括 char *fgets(char * 限制 s, int n, FILE *
考虑以下示例代码: 无效black_box(int* foo); int foo(int x) { 黑盒(&x); 返回x; } int bar(const int x) { black_box(const_cast(&x)); 重新...
我希望 b{d{}} 中的 b 构造会导致编译错误,因为 b 的模板化构造函数由于其限制而不可行。然而,GCC和MSVC似乎接受这个代码...
在下面的程序中,模板函数 f 调用重载模板函数 p,其中一个重载是在 f 之后声明的,但据我了解,它必须在实例化点找到......
对两个不相关的指针(即不指向同一个数组或对象的两个指针)进行算术比较是 C 中未定义的行为。 整数a,b; 布尔 ub = &a < &b;...
根据定义对无限的 IO 操作列表进行排序是否会导致永无止境的操作?或者有什么办法可以摆脱吗?
这实际上是我想通过我之前的问题来理解的东西,但我用词不当,理所当然地认为解决方案必须以某种方式建立在顺序和重复的基础上,所以我得到了一个
根据 C++ 文档,运算符 new/etc。功能是: 在每个翻译单元中隐式声明[,并且]如果在
在与 getc 系列返回值进行比较之前,是否必须将字符转换为 unsigned char?
我不确定在与 getc 系列函数的返回值进行比较之前是否必须将字符转换为无符号字符。 这是没有演员表的示例: #包括 ...
std::thread/jthread 可以在不执行传递的函数的情况下退出吗?
加入 std::thread 或 std::jthread 太快(在操作系统中实际启动线程之前)是否有可能导致线程根本不执行?或者是否保证它会简单地...
当我注意到一种这样的情况(如下所示)在 clang 和 msvc 中编译得很好但在 gcc 中却不行时,我试图显式地专门化一个成员函数模板。这是验证链接...
我最近注意到一个关于 C++23 推导此功能的奇怪问题。 假设我们有一个带有简单转换运算符的结构体 S: 结构体S{ 运算符 int() { 返回 42; } }; int i = S{}; ...
rustnomicon 包含以下示例: #[no_mangle] extern“C”fnassert_nonzero(输入:u32){ 断言!(输入!= 0) } 如果使用参数 0 调用assert_nonzero,则运行...
考虑以下示例: 结构爷爷{ 爷爷(int x) {} }; 结构爸爸:爷爷{ 爸爸(int y) : 爷爷(15) {} }; 结构儿子:爸爸{ 儿子(int z) : 爸爸(z) {} }; int main () {...
考虑以下代码: #包括 // void foo(int* t ) { std::cout << "variant int* t, non-template\n"; } template void f...
关于下面代码的两个问题: 是否允许在无符号类型上中间值来“存储”负值?形式上,两种类型的操作数的类型都是无符号的,结果都是
根据 [basic.types#2] memcpy 不适用于潜在重叠的子对象。 对于任何对象(除了潜在重叠的子对象) 简单可复制的类型 T,无论是...