这个经典的ioccc条目是一个用C语言编写的Hello World程序.任何人都可以解释它是如何工作的吗?
原始代码(语法突出显示故意丢失):
int i;main(){for(;i["]<i;++i){--i;}"];read('-'-'-',i+++"hell\ o, world!\n",'/'/'/'));}read(j,i,p){write(j/p+p,i---j,i/i);}
稍微清洁一点:
int i;
main()
{
for ( ; i["]<i;++i){--i;}"]; read('-' - '-', i++ + "hello, world!\n", '/' / '/'));
}
read(j, i, p)
{
write(j / p + p, i-- - j, i / i);
}
Run Code Online (Sandbox Code Playgroud) 我对一些研究或经验数据非常感兴趣,这些数据显示了两个c ++项目之间的编译时间的比较,除了一个在可能的情况下使用前向声明而另一个使用none之外.
与完全包含相比,转发声明会如何彻底改变编译时间?
#include "myClass.h"
Run Code Online (Sandbox Code Playgroud)
与
class myClass;
Run Code Online (Sandbox Code Playgroud)
有没有研究可以检验这一点?
我意识到这是一个模糊的问题,很大程度上取决于项目.我不希望得到答案的难数.相反,我希望有人可以指导我做一个关于此的研究.
我特别担心的项目有大约1200个文件.每个cpp平均包含5个头.每个标头平均包含5个标头.这回归了大约4个层次.似乎对于编译的每个cpp,必须打开和解析大约300个头文件,有时多次.(包含树中有许多重复项.)有警卫,但文件仍然打开.每个cpp都是用gcc单独编译的,所以没有头缓存.
为了确保没有人误解,我当然主张在可能的情况下使用前瞻性声明.但是,我的雇主禁止他们.我试图反对这个立场.
感谢您提供任何信息.
在Python中,使用itertools模块生成列表的所有排列非常简单.我有一种情况,我使用的列表只有两个字符(即'1122').我想生成所有独特的排列.
对于字符串'1122',有6个唯一的排列(1122,1212,1221等),但itertools.permutations将产生24个项目.仅记录唯一排列很简单,但是由于考虑了所有720个项目,因此收集它们所需的时间要长得多.
是否有一个函数或模块在生成排列时会考虑重复的元素,所以我不必自己编写?
我是一名很长时间的C++程序员,即将开始从事C#项目.
要注意哪些概念上的变化,最重要的是,我应该避免在C#中通常用C++做什么?C++程序员给C#带来了哪些坏习惯会丢失?
我有一份我打算阅读的C#书籍清单.我希望通过其他程序员的经验来增强这一点,因为我可能会犯同样的错误; 我想在它发生之前预防.
我有一个SVN服务器,我想使用我们的LDAP服务器进行用户身份验证.现在我正在为每个存储库指定用户名和密码,这工作正常,但更多人决定使用此服务器.我真的不应该访问他们的密码.我想使用LDAP来验证用户身份,我想授予整个域的访问权限,而不是单独指定用户.
一些(可怕的)细节:
最后,如果这完全是一个坏主意,或者如果有更好的解决方案,我会有兴趣听到它.
谢谢!
正如在12.2.5节中的c ++编程语言第3版中所讨论的那样,类型字段倾向于创建比使用虚函数和多态的等效代码更不通用,容易出错,更不直观和更少可维护的代码.
举个简短的例子,下面是如何使用类型字段:
void print(const Shape &s)
{
switch(s.type)
{
case Shape::TRIANGE:
cout << "Triangle" << endl;
case Shape::SQUARE:
cout << "Square" << endl;
default:
cout << "None" << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
很明显,这是一个噩梦,因为为此增加了一种新的形状,十几种类似的功能会容易出错并且很费劲.
尽管存在这些缺点以及TC++ PL中描述的那些缺点,但是有没有这样的实例(使用类型字段)比使用虚函数的语言特性更好的解决方案?或者这种做法应该被列为纯粹的邪恶?
现实的例子比人为的例子更受欢迎,但我仍然对人为的例子感兴趣.另外,你有没有在生产代码中看到这一点(即使虚拟功能会更容易)?