幻の上帝 幻の上帝
关注数: 156 粉丝数: 1,931 发帖数: 72,393 关注贴吧数: 291
[喂熊试验][原创翻译]ISO C11 Annex C(final draft N1570) 附录C (参考件) 序列点(Sequence points) 1 以下是 5.1.2.3 中描述的序列点: — 一个函数调用中在函数指示符(function designator)和实际参数(actual arguments)的求值以及实际的调用之间。 (6.5.2.2) 。 — 在以下操作符的第一个和第二个操作数的求值之间: 逻辑与 && (6.5.13) ;逻辑或 || (6.5.14) ;逗号 , (6.5.17) 。 — 在条件 ?: 操作符的第一个操作数以及第一个或第三个操作数中任意一个被求值之间 (6.5.15) 。 — 一个完整声明符(full declarator)的结束:声明符(declarators) (6.7.6)。 — 一个完整表达式(full expression) 和下一个待求值的完整表达式的求值之间。以下是完整表达式:一个不属于组合字面量(‮dnuopmoc‬ literal)的初值符(initializer) (6.7.9);在表达式语句中的表达式 (6.8.3) ;一个选择语句(if或switch)中的控制表达式(controlling expression) (6.8.4) ;一个while或do语句(if或switch)中的控制表达式 (6.8.5) ;for语句中每个(可选的)表达式 (6.8.5.3) ;return语句中(可选的)表达式 (6.8.6.4) 。 — 紧接一个库函数返回之前 (7.1.4) 。 — 在每一个格式化输入/输出函数的转换指示符(conversion specifier)关联的动作之后 (7.21.6, 7.29.2) 。 — 紧接每个比较函数(comparison function)的调用之前和之后;在比较函数的任何调用以及调用中任何以参数传递的对象的转移(movement of the object)之间 (7.22.5) 。 [EOF]
ISO C的一些基本概念 ISO C的一些基本概念 ……姑且不算是入门的必要条件好了。不过可以肯定以下一窍不通 = 没学会。 ==== [ISO C11 Clause 3] == 对象(object): 执行环境中数据存储的一块区域,它的内容可以用来表示值。 -注释:对象可以具有特定的类型。 -- 值(value): 确定类型的对象的内容的确切含义。 -- 访问(access): 读取或修改一个对象的值。 -注释1:如果只适用其中一种含义,则直接用“读取”或“修改”。 -注释2:“修改”包含新值和先前存储的旧的值相同的情况。 -注释3:未被求值的表达式不访问对象。 -- 行为(behavior): 外部的表现或动作。 -- 未定义行为(undefined behavior): 通过使用不可移植、错误的程序构造或错误的数据导致的ISO C没有任何要求的行为。 -- 未确定行为(unspecified behavior): 使用一个未确定值,或其它ISO C提供超过一种可能但在任何情形下不要求确定的行为。 -- 未确定值(unspecified value): 适当类型的有效的值,ISO C在任何情形下不要求确定值的可能选择。 -- 由实现定义的行为(implementation-defined behavior): 未确定行为,由每个实现的文档选择决定。 -- 由实现定义的值(implementation-defined value): 未确定的值,由每个实现的文档选择决定。 -- 位(bit): 执行环境中数据存储的单元,至少能保存具有两个值之一的对象。 -注释:对象中的每个位不需要保证可以表达为地址。 -- 字节(byte): 可寻址的数据存储单元,至少能保存基本执行字符集的任何一个成员。 -注释1:对象的每个字节的地址具有唯一表达。 -注释2:一个字节由连续的位序列组成,它的数量由实现定义(implementation-defined)。最低有效位称为low-order bit;最高有效位称为high-order bit。 -- 字符(character): <抽象>一个元素用来组织、控制或表示数据的集合中的成员。 ---- 单字节字符(single-byte character): 一个字节的位表示。 ---- 多字节字符(multibyte character): 一个或多个字节的序列,表示一个源或执行环境中的扩展字符集的成员。 ---- 宽字符(wide character): 可以被类型wchar_t表示它的值的字符,兼容于在现有区域(locale)的任何字符的表示。 ---- 约束(constraint): 说明语言的要素时在语法(syntactic)或语义(semantic)上的限制。 ---- 运行时约束(runtime-constraint): 调用一个库函数时对程序的要求。 == 1 ISO C中,“应当(shall)”表示对实现或程序的要求;“不应当(shall not)”表示禁止。 2 如果约束或运行时约束以外的一个“应当”或“不应当”要求被违反,行为未定义。ISO C中的未定义行为包括其它直接的“未定义行为”表述或显式的行为定义的缺失。这三点的强调语气没有区别,都表示“行为未定义”。 == 5.1.2.3 程序执行 1 ISO C描述的抽象机(abstract machine)行为中的程序语义叙述和优化无关。 2 访问一个volatile对象,修改一个对象,修改一个文件,调用一个存在以上操作的函数都是副作用。副作用改变执行环境的状态。表达式的求值包括值的计算和副作用。左值(lvalue)表达式的计算包括决定被指示对象的同一性。 3 前序(sequenced before)是单线程程序中的求值之间的一个反对称、传递的二元关系,它决定求值存在一个偏序(partial order)。给定两个求值A和B,若A前序于B,则A应当在B之前执行。(对应地,若B前序于A,则A后序(sequenced after)于B。)若A既不前序也不后序于B,则A和B是非序列的(unsequenced)。A和B是未决定序列的(indeterminately sequenced),当A前序于B或B前序于A,但不确定是哪一种情况。13)存在于A和B之间的序列点蕴含(implies)和A关联的每个值的计算和副作用前序于和B关联的每个值的计算和副作用。(一份关于序列点的总结见附录C。) 4 在抽象机中,所有表达式以指定的语义被求值。一个实际实现不需要求值每一个部分,若它可以推断(deduce)这个值没有被使用且没有必要产生副作用(包括任何通过调用函数或访问volatile对象的情形)。 13)非序列求值可以交错进行(interleave)。未决定序列求值不能交错,但可以任意顺序进行。
【转】英物理学家冷嘲中微子超光速 打赌吃内裤 http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cnbeta.com%2Farticles%2F156335.htm&urlrefer=b0757556f94ae6b470a304af1e7a72fa 求出处,新浪上没找到原文…… ==== 新闻来源:新浪科技 对于中微子移动速度超过光速的这一惊人发现,一些科学家持怀疑态度。这一发现由欧洲核子研究组织(CERN)的物理学家得出,如果计算结果是正确的,爱因斯坦的相对论必将遭到挑战,这项理论早已成为物理学的基石。如果被证明是正确的,这一发现将撼动物理学的基石和爱因斯坦的狭义相对论。这一理论提出了一个著名方程式,也就是E=mc2 对于中微子移动速度超过光速的这一惊人发现,一些科学家持怀疑态度。这一发现由欧洲核子研究组织(CERN)的物理学家得出,如果计算结果是正确的,爱因斯坦的相对论必将遭到挑战,这项理论早已成为物理学的基石。   实验过程中,科学家将亚原子粒子中微子从瑞士的大型强子对撞机发射到454英里(约合730公里)外意大利的一家实验室。根据计算结果,用时只 有60毫微秒,速度打破光速。但其他一些科学家并不相信这一发现,其中一位科学家表示,如果证明这一结果是正确的,他就把自己的内裤吃了。   著名科学家布莱恩-考克斯并没有对这一发现持一种不屑一顾的态度,他表示如果计算结果得到证实,这将是历史上最伟大的科学发现之一。相比之下, 其他科学家的态度则可以用“冷嘲热讽”形容。英国萨里大学物理学教授吉姆-阿尔-克哈里利表示:“不要说大话,要拿出证据。如果CERN的实验结果被证明 是正确的,中微子的速度确实超过光速,我就把自己的拳击内裤吃掉并且在电视上现场直播。”   如果中微子超光速的发现真实存在,科幻作品中的一些想定有望成为现实,例如向过去发送信息,模糊过去与现在之间的界线。CERN物理学家表示他 们对实验发现进行了长达6个月的反复测试,并没有发现任何东西能够改变这一结果。全世界的科学家对这一发现反应强烈,有的感到震惊,有的则冷嘲热讽。实验 中,中微子以0.0024秒完成这段旅途,每秒的速度达到299798454米。科学家在日内瓦举行的记者招待会上表示,光在真空环境下的速度为每秒 299792458米。也就是说,中微子的速度比光快600亿分之一秒。   这是一项空前的发现,首席研究员安东尼奥-埃雷迪塔托用“疯狂”描述这一发现。他呼吁同行进行同样的实验以确定能否复制这一发现。他说:“我们 试图找到所有可能的解释,解释这一发现。我们希望发现整个过程中出现的错误,或者是一些微不足道的错误,或者是更为复杂的错误和一些令人厌恶的影响。我们 用了数月时间核实这一发现,但并没有发现任何可疑的地方。”   物理学教授考克斯说,如果证明是正确的,这将是一项非常重大的发现,让时间旅行成为一种可能。“这是一项惊人发现。如果一种物质的速度能够超过 光速,这将彻底改变我们对宇宙的认知。所有人对这一发现都必须小心谨慎,因为爱因斯坦的狭义相对论认为任何物体的速度都不可能超过光速,这一理论早已成为 我们研究物理学的基础。由于光速是宇宙的速度极限,你无法制造出一台时光机,像神秘博士一样回到过去。”   CERN科学家进行这项实验的目的并不是为了挑战爱因斯坦1905年提出的理论,而是为了测试其他东西。实验中,他们使用了1.6万个中微子。 中微子是一种极其微小的粒子,几乎没有重量,由大爆炸或者恒星形成过程中的核反应产生。由于能够穿透任何物质,中微子被称之为“幽灵”。每天有数十亿个中 微子穿过我们的身体。   实验中,中微子从瑞士的对撞机穿过地壳,而后进入意大利的格兰萨索国家实验室,实验室的探测器最后接收到这些粒子。对于超光速这一令人难以置信 的实验结果,一种可能的解释是计算时出现误差,可能是距离方面的误差,也可能是时间方面的误差。通过利用另一条路线进行同样的实验,科学家才可验证这一发 现。这项实验可以利用美国和日本的对撞机。   伯明翰大学物理学家艾伦-沃特森博士表示:“这促使我们提出这样一种想法——在A向B发送短信过程中,如果另外一个人朝着信息传输的方向移动并 且速度极快,他能够在A发送前看到B接收到信息。”日本的T2K实验能够为验证这一发现提供帮助,可惜的是,3月11日发生的地震以及引发的海啸导致实验 中断。科学家表示,如果实验结果得到证实,他们就必须从根本上重新思考自然法则。   爱因斯坦的狭义相对论认为能量等于质量乘以光速的平方。CERN理论物理学家约翰-埃利斯表示,这一理论成为现代物理学的基石。“它是一项完美 的理论。”埃利斯并没有参与此项实验。他指出中微子研究人员必须解释为何此前未能发现类似结果,例如在1987年观测到超新星爆炸时。埃利斯说:“如果被 证明是正确的,这将是一项引起轰动的发现,必须非常谨慎地对待。”
装FontForge等得O疼,无聊出道水题 阅读以下代码并回答问题 //VS2010 tested. #include <cstdio> #include <cstring> #include <cctype> #include <iostream> #include <list> #include <string> #include <functional> #include <algorithm> //using namespace std; typedef std::string token_t; typedef std::string line_t; class tester { public: typedef token_t item_type; typedef std::list<item_type> container_type; private: container_type lst; public: std::size_t input(); void output(); void parse_line_to_token(const line_t&); }; std::size_t tester::input() { line_t line; using namespace std; size_t i(0); while(getline(cin, line)) { parse_line_to_token(line); ++i; } return i; } void tester::output() { using namespace std; std::for_each(lst.begin(), lst.end(), [](const item_type& s) { std::cout << s << std::endl; }); cout << lst.size() << " token(s) parsed." <<endl; } template<typename _fPred, typename _fInserter> void parse_line(const line_t& line, _fPred pred, _fInserter inserter) { line_t::size_type i(0), j; while(line[i] != '\0') if(pred(line[i])) { j = i; while(pred(line[++i])) ; inserter(line.substr(j, i - j)); } else ++i; } void tester::parse_line_to_token(const line_t& line) { parse_line(line, std::isgraph, [this](item_type&& item) { lst.push_back(item); }); } int main() { tester t; auto i(t.input()); std::cout << i << " line(s) parsed." << std::endl; t.output(); } // EOF 1.分析这段代码用来干嘛的。。 2.哪些是不必要#include的? 3.用了哪些C++11特性?部分特性是否可以用std::tr1的相关实现代替? 4.以上实现中的主要缺陷?
渣代码求破 #include #include const char* dst = "@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')#}'+}##(!!/"; const char* src = "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:"; const char* dic = "\nuwloca-O;m .vpbks,fxntdCeghiry"; char decode(char c) {     return dic[strchr(src, c) - src]; } void t_0(const char* a) {     while(*a != '/')     {         putchar(decode(*a));         ++a;     } } #define main mainx int main(int t, int c, const char* a) {     if(t < -72)         return main(c, t, dst);     else if(t < -50)         return putchar(strchr(a, c)[31]);     else if(t < 0)     {         if(*a == '/')             ++t;         return main(t, c, a + 1);     }     else     {         if(t == 0)         {             t_0(a);             return 1;         }         if(t == 1)             abort();         if(t == 2)         {             t_0(dst);             main(1 - c, -87, dst);             main(-13, -79, dst);         }         if(t < c)             main(t + 1, c , a);         if(main(t - 27, -94, dst) && t == 2)         {             if(c < 13)                 return main(2, c + 1, "%s %d %d\n");             else                 return 9;         }         else             return 16;     }    } #undef main int main() {     mainx(2, 2, "%s");     getchar();     return 0; } 某IOCCC逆向了一半,坑了。
出道题 (蛋疼自虐噎老师用……) 指出下面注释处的用法是正确还是错误的,说明理由。 (1) namespace A { int i; } namespace A1 { using A::i; using A::i; // } void f() { using A::i; using A::i; // } class B { public: int i; }; class X : public B { using B::i; using B::i; // }; (2) namespace A { void f(int); } using A::f; // namespace A { void f(char); } void foo() { f('a'); // } void bar() { using A::f; // f('a'); // } (3) namespace A { int x; } namespace B { int i; struct g { }; struct x { }; void f(int); void f(double); void g(char); // } void func() { int i; using B::i; // void f(char); using B::f; // f(3.5); // using B::g; g('a'); // struct g g1; // using B::x; using A::x; // x = 99; // struct x x1; // } (4) namespace B { void f(int); void f(double); } namespace C { void f(int); void f(double); void f(char); } void h() { using B::f; // using C::f; // f('h'); // f(1); // void f(int); // // } (5) struct B { virtual void f(int); virtual void f(char); void g(int); void h(int); }; struct D : B { using B::f; void f(int); // using B::g; void g(char); // using B::h; void h(int); // }; void k(D* p) { p->f(1); // p->f('a'); // p->g(1); // p->g('a'); // } (6) struct A { int x(); }; struct B : A { }; struct C : A { using A::x; int x(int); }; struct D : B, C { using C::x; int x(double); }; int f(D* d) { return d->x(); // } (7) class A { private: void f(char); public: void f(int); protected: void g(); }; class B : public A { using A::f; // public: using A::g; // };
投名状 貌似还没在这吧发过主题...随便来一贴吧 ---- //元编程练习,编译期选择static_cast/dynamic_cast之一进行转换,直觉上仍然总觉得不知在哪会出问题(刚刚干掉了个exception specfier的bug),求测试和改进...    template<class _type>     struct has_nonempty_virtual_base     {         struct A             : _type         {             ~A() throw()             {}         };         struct B             : _type         {             ~B() throw()             {}         };         struct C             : A, B         {             ~C() throw()             {}         };         enum         {             value = sizeof(C) < sizeof(A) + sizeof(B)         };     };     template<class _type1, class _type2>     struct has_common_nonempty_virtual_base     {         struct A             : virtual _type1         {             ~A() throw()             {}         };         struct B             : virtual _type2         {             ~B() throw()             {}         };         struct C             : A, B         {             ~C() throw()             {}         };         enum         {             value = sizeof(C) < sizeof(A) + sizeof(B)         };     };
首页 1 2 3 4 5 下一页