一位同事不小心写了这样的代码:
li p, li h1, li h2 {
margin-top: 0;
margin-bottom: 0;
padding-top: 0;
padding-bottom: 0;
}
GCC 5.1.0编译了这个。
这个编译的规则是什么?
答案 0 :(得分:30)
此处使用injected-class-name,
为了lookup的目的,其自己定义中的类的名称充当其自身的公共成员类型别名(除非用于命名constructor):这称为注入 - 类名
然后
@Document(collection = "clients")
public class ClientData {
@Id
private String id;
private double bearing;
private double latitude;
private double velocity;
private double longitude;
private LocationBearerType clientDataType = CAR;
private Boolean standby;
private long timestamp;
即。 foo::
foo::
foo::foob
与foo::foo::foo::foob
相同。
然后foo::foob
是range-based for loop (since C++11),它会迭代3个枚举数形成的braced-init-list。
答案 1 :(得分:4)
我将此代码更改为:
#include <initializer_list>
#include <iostream>
struct foo {
foo() : baz(foobar) {}
enum bar {foobar, fbar, foob};
bar baz;
};
int main() {
for( auto x : { foo::foobar,
foo::fbar,
foo::
foo::
foo::foob } )
{
std::cout << "x=" << x << std::endl;
}
return 0;
}
for循环运行3次。输出为:“x = 1 x = 2 x = 3”。
foo::foo::foo::foob
与foo::foob
相同。
所以
for( auto x : { foo::foobar,
foo::fbar,
foo::
foo::
foo::foob } )
是相同的
for( auto x : { foo::foobar, foo::fbar, foo::foob } )
{
}
这意味着x
的范围为{ foo::foobar, foo::fbar, foo::foob }