下面的代码是用Clang编译和运行的(在13、14和当前git头上进行了测试),但不是用GCC。
struct foo {
int field<0, 1, int, 3>;
};
但我不明白它在宣告什么:这个领域是什么?
int field<0, 1, int, 3>;
我可以在字段里放任何我想要的东西
如果对foo
的字段
成员没有任何类型的有效定义,这就不是有效的C
语法。
下面的代码编译并运行
我试着编译了下面的程序:
#include <iostream>
struct foo {
int field<0, 1, int, 3>;
};
int main(void){
foo x;
std::cout << x.field << std::endl;
}
用铿锵v13。arch linux上的0.1
编译器
clang++ -std=c++20 main.cc -o main
它会产生一些错误:
main.cc:9:20: error: no member named 'field' in 'foo'
std::cout << x.field << std::endl;
~ ^
1 error generated.
上述错误清楚地表明,字段
不是模板。
然后,我尝试用gcc v11编译它。2.0,它给出了语法错误
main.cc:4:7: error: expected ‘;’ at end of member declaration
4 | int field<0, 1, int, 3>;
| ^~~~~
| ;
main.cc:4:12: error: expected unqualified-id before ‘<’ token
4 | int field<0, 1, int, 3>;
这是clangv9中的某种bug。0
哪个可以做到这一点。
如果没有字段的声明,这甚至不是有效的语法:
假设字段
不是已声明的模板,则程序的格式不正确。
但我不明白它在宣告什么:这个领域是什么?
Clang AST说:
`-CXXRecordDecl 0xdb6f20 <test.cpp:1:1, line:3:1> line:1:8 struct foo definition
`-FieldDecl 0xdb7168 <line:2:3> col:7 'int'
clang AST用于具有int字段的程序;
:
`-CXXRecordDecl 0x168af90 <test2.cpp:1:1, line:3:1> line:1:8 struct foo definition
`-FieldDecl 0x168b150 <line:2:3, col:7> col:7 field 'int'
所以,看起来Clang认为有一个int
字段被声明了,但字段的名称是空的。这似乎可以通过初始化这个“未命名”字段得到证实:
foo f{0}; // compiles in Clang
第一个出现此错误的叮当版本似乎是9:https://gcc.godbolt.org/z/d386oz8v8
问题内容: Java具有格式字符串的概念,与其他语言的格式字符串非常相似。它用于诸如输出转换之类的JDK方法中。 我想知道在Java中是否有类似于C的输入转换方法? 问题答案: 看一下该站点,它解释了两种使用java中的控制台读取的方法,使用或使用System.in中的经典方法。 以下代码摘自引用的网站: - 问候。
问题内容: 如何在Java中解码使用HttpServerUtility.UrlTokenEncode在C#中编码的字符串? 问题答案: 我尝试使用(ctor接受一个参数,说明编码/解码是否是url安全的),但事实证明它的实现方式与UrlTokenEncode / Decode不同。 我最终将C#实现迁移到Java:
在C和C中都有效但具有不同语义学的语法示例是什么?换句话说,使用C和C编译器编译时产生不同输出的程序示例是什么?
我是MySQL的新手。我有以下SQL查询,并尝试转换为mysql,为表create脚本中的日期列提供默认值。 但在MySQL中不支持。获取以下错误。 错误代码:1064。您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以了解第1行“(-1),sysutcdatetime())”附近使用的正确语法 此外,我还需要以以下格式获取日期'9999-12-31 23:59:59.99999
问题内容: 是否有与C ++等效的Java Map keySet()? Java 方法返回“此映射中包含的键的设置视图”。 问题答案: 也许以下可能有用: 使用STL兼容序列(例如std :: vector,std :: deque或std :: list)的 make_key_set 函数的重载可以如下所示:
问题内容: 我知道Java本身没有直接的等效项,但也许是第三方? 真的很方便。当前,我想实现一个迭代器,该迭代器生成树中的所有节点,这大约是带有yield的五行代码。 问题答案: 我知道的两个选项是2007年的Aviad Ben Dov的infomancers- collections库 和2008年的Jim Jimler的YieldAdapter库 (在另一个答案中也提到了)。 两者都允许您使用