由买买提看人间百态

topics

全部话题 - 话题: 函数调用
首页 上页 1 2 3 4 5 6 7 8 9 10 (共10页)
a****a
发帖数: 67
1
原文连接:http://ladder.azurewebsites.net/forum.php?mod=viewthread&tid=121&extra=page%3D1
第一集:Mr.Method
Hi,大家好~~我是Mr.Method,和Mr. Okay是好哥们儿。
在所有面向对象的语言里你都能见到我的身影。不信?你们学编程的时候第一个程序
都是Hello World吧?那就是依靠对我的调用实现的——无论是哪个平台、哪种语言,
你一定调用了在命令行里输出字符串的某个Method。
铁三角
在正式介绍我自己之前,还是先说说我的哥哥和妹妹吧,我们的家庭背景有助于大家
对我有一个更好的了解。我的哥哥(Mr. Class)和小妹(Mr. Field)加上我,我们仨
可是面向对象家庭里绝对的主角、“铁三角”。我们三个之所以称为“铁三角”是因为
我们各司其职、配合的非常默契。Mr.Class,他是个很好的组织者,他能把从现实世界
抽象出来的结果良好地组织在一起(这个叫“封装”)——我(Mr.Method)和我小妹
(Ms. Field)被我哥管着(注:被封装在类里)。小妹负责表示我们这个小组织当... 阅读全帖
a****a
发帖数: 67
2
原文:http://ladder.azurewebsites.net/forum.php?mod=viewthread&tid=121&extra=page%3D1
第一集:Mr.Method
Hi,大家好~~我是Mr.Method,和Mr. Okay是好哥们儿。
在所有面向对象的语言里你都能见到我的身影。不信?你们学编程的时候第一个程序
都是Hello World吧?那就是依靠对我的调用实现的——无论是哪个平台、哪种语言,
你一定调用了在命令行里输出字符串的某个Method。
铁三角
在正式介绍我自己之前,还是先说说我的哥哥和妹妹吧,我们的家庭背景有助于大家
对我有一个更好的了解。我的哥哥(Mr. Class)和小妹(Mr. Field)加上我,我们仨
可是面向对象家庭里绝对的主角、“铁三角”。我们三个之所以称为“铁三角”是因为
我们各司其职、配合的非常默契。Mr.Class,他是个很好的组织者,他能把从现实世界
抽象出来的结果良好地组织在一起(这个叫“封装”)——我(Mr.Method)和我小妹
(Ms. Field)被我哥管着(注:被封装在类里)。小妹负责表示我们这个小组织当前
... 阅读全帖
c****m
发帖数: 824
3
【 以下文字转载自 Programming 讨论区 】
发信人: xiaoju (可爱的龙猫), 信区: Programming
标 题: 转:王垠--一种新的操作系统设计
发信站: BBS 未名空间站 (Sat Sep 14 10:22:03 2013, 美东)
http://www.yinwang.org/blog-cn/2013/04/14/os-design/
一种新的操作系统设计
我一直在试图利用程序语言的设计原理,设计一种超越“Unix 哲学”的操作系统。这
里是我的设想:
这种系统里面的程序间通信不使用无结构的字符串,而是使用带有类型和结构的数据。
在这样的系统里面,“程序”的概念基本上完全消失。系统由一个个的“函数”组成,
每个函数都可以调用另外一个函数,通过参数传递数据。每个函数都可以并发执行。
由于参数是一个数据结构,而不是字符串,这避免了程序间通信繁琐的“编码”和“解
码”过程。使得“进程间通信”变得轻而易举。任何函数都可以调用另一个函数来处理
特定类型的数据,这使得像 “OLE 嵌入”这样的机制变得极其简单。
所有函数由同一种先进的高级程序语言写成,所以函数间... 阅读全帖
T******7
发帖数: 1419
4
本片最主要的设定是什么呢?梦中梦对不对?这在程序的角度来说再直观不过了,那就
是——递归,如果做梦是一个函数Dream,那么梦中梦就是该函数的递归调用。
比起一般的递归调用来,该程序的特殊之处是,它是一个多线程的递归调用,也即是说
每一次递归都会新建一个线程来执行函数体。因此该递归函数有两种结束机制,一种是
wait超时(药物失效),另一种是由其调用函数来结束(kick)。
而由于硬件平台所限,该递归只能进行四层,因为每次递归都需要消耗系统资源,所以
递归深一层,系统运行就越慢(梦境每深一层,时间就变慢20倍)。一旦在第四层的时
候资源耗尽(做梦者生命耗尽),就会产生栈溢出,因此线程就会进入僵死状态(
limbo状态)。
而一旦将运行超时时间设置得过长(强力镇静药物),则会导致子线程运行过长从而耗
尽资源。此时如果子线程还没有被上层调用函数强制结束(撞击),则会被detach(在
梦中死去),因此进入僵死状态(进入limbo状态)。
而为什么多层次的梦唤醒需要同步撞击呢,这就跟我们析构一个含有指针的STL容器一
样,如果不遵守顺序,那么就会出现容器被析构而指针内容还在从而发生内存泄露的... 阅读全帖
a****a
发帖数: 5763
5
http://bbs.weiphone.com/read.php?tid=507486
Mac OS X 10.6即所谓的Snow Leopard操作系统已正式发售。一如既往,Apple产品光
鲜的外表下凝聚了太多艰辛的劳作。ArsTechnic的John Siracusa以其独特的、专业的
、全面的视角深入翔实地体验这款最新的操作系统。
Weiphone.com将对该综述进行翻译整理并独家连载。欢迎关注
2009年底,Apple为新上市的Snow Leopard推出了C语言扩展,称之为“block
”。 Block为C语言以及源于C语言的C++、Objective-C和Objective C++增添了闭包(
closure)以及匿名函数功能。这些功能已在动态程序语言(dynamic programming
language)上应用了很长的时间,诸如Lisp、Smalltalk、Perl、Python、Ruby甚至
JavaScript。尽管使用动态语言的程序员早已对闭包(closure)和匿名函数习以为常,
然而对使用更为传统的静态编译语言(譬... 阅读全帖
x****u
发帖数: 44466
6
http://blog.sina.com.cn/s/blog_5d90e82f0101iq0n.html
推荐一篇很久以前看的文章:Oberon - The Overlooked Jewel
它介绍的是 Niklaus Wirth 设计的一种操作系统,叫做 Oberon。Niklaus Wirth 就是
大家熟知的 Pascal 语言的设计者。绝大部分人都没听说过有 Oberon 这个东西存在,
更难以把它跟 Niklaus Wirth 的大名挂上钩。所以作者说:“Wirth 因为 Pascal 而
闻名于世,可是接下来几年,他成为了 Pascal 的受害者。” 确实是这样。Wirth 一
直都不觉得 Pascal 是他的杰作。我想他应该会更喜欢以 Oberon 闻名于世。
Oberon 比起 Unix,有很大的不同,在于它的数据都是结构化的。进程间不通过字符串
交换数据,而是直接使用数据结构。很奇特的一点是,Oberon 操作系统是用一种同名
的程序语言(Oberon 语言)写成。令人惊讶的是,在那个年代,ETH 计算机系的所有
教职员工,学生,包括办公室的大妈,都是用的这种操作系统... 阅读全帖
x****u
发帖数: 44466
7
来自主题: Programming版 - 转:王垠--一种新的操作系统设计
http://www.yinwang.org/blog-cn/2013/04/14/os-design/
一种新的操作系统设计
我一直在试图利用程序语言的设计原理,设计一种超越“Unix 哲学”的操作系统。这
里是我的设想:
这种系统里面的程序间通信不使用无结构的字符串,而是使用带有类型和结构的数据。
在这样的系统里面,“程序”的概念基本上完全消失。系统由一个个的“函数”组成,
每个函数都可以调用另外一个函数,通过参数传递数据。每个函数都可以并发执行。
由于参数是一个数据结构,而不是字符串,这避免了程序间通信繁琐的“编码”和“解
码”过程。使得“进程间通信”变得轻而易举。任何函数都可以调用另一个函数来处理
特定类型的数据,这使得像 “OLE 嵌入”这样的机制变得极其简单。
所有函数由同一种先进的高级程序语言写成,所以函数间的调用完全不需要“翻译”。
由于这种语言不允许应用程序使用“指针运算”,应用程序不可能产生 segfault 一类
愚蠢的错误。
由于没有指针运算,系统不再需要现代处理器提供的“内存映射”机制,以及 TLB。这
使得内存访问效率大幅提高。而且简化了处理器的设计。
操作... 阅读全帖
M********5
发帖数: 715
8
来自主题: JobHunting版 - 问一道c++面试题
you didn't get it either.
这位han6说得是,如果只能在heap上创建类,怎么做?
答案就是,将析构函数设成private,这样,如果你在stack上定义一个对象,在程序结
束的时候,系
统会自动调用析构函数。但是现在析构函数是private的,所以就会出错,也就是说,
系统无法销毁对
象。那么就不能在stack上创建对象,所以只能在heap上用new来创建对象。这样一来,
又有个问题,
就是对象分配的空间要释放啊?那怎么办呢,就在类里面定义一个接口函数(注意,
public的函数才能
叫作接口函数),在这个函数里面调用析构函数,然后在其他函数中调用这个接口函数
,就可以释放对
象。
这就是,在new之后不调用delete,而调用这个接口函数的意思。
you got it?

发帖数: 1
9
来自主题: MobileDevelopment版 - 说说苹果禁止JSPatch等iOS APP热更新方案
我看了邮件原文,苹果这次的警告是针对使用了
dlopen(), dlsym(), respondsToSelector:, performSelector:,
method_exchangeImplementations() 等反射函数用于动态调用oc API
通过远程下载的脚本使用这些函数达成改变app行为才会被当做违规行为,
换句话说,就是
如果本地使用(非远程下载)这些函数是允许的,要不oc也没必要提供这些函数,但在
技术上我认为apple很难判别是本地使用,还是被远程更新的脚本调用;
脚本更新是允许的,即lua并不使用上述反射函数,而使用确定的导出函数也是允许的;
为什么呢?苹果给出的解释是担心中间人攻击,就是说,如果使用jspatch可以做到被
中间人利用调用任意系统API,而造成风险,而这些滥用很可能不是app开发者本身的意
图;而一般游戏使用的lua更新方案是在确定的导出API里使用lua作为开发脚本,本身
能够调用的功能是确定、有限的,而不是不确定、任意的系统API,我认为这样做苹果
是默认的;当然使用lua作为脚本,调用了上述oc反射方法的framework、sdk估... 阅读全帖
a****a
发帖数: 5763
10
随着CPU与GPU合并成技术发展的趋势,苹果开发出了OpenCL框架,能够进行高速并行处
理的能力使OpenCL成为了业界标准,被广泛应用。
最近几年,GPU的发展吸引了很多来自科学计算界人士的目光。GPU有稳定的市场推动力
—公众喜闻乐见的电子游戏产生了源源不断的升级GPU的需求—因此比CPU的更新步伐更
快。从技术上讲,GPU本身就是多核架构,高端显卡往往有五百多个核心,即使低端的
集成GPU也有二三十个核心,所以能够通过并行来高效处理成千上万的线程。同时,对
于科学技算中的浮点计算,GPU往往通过硬件加速使其效率比传统CPU更高,因为图形渲
染等工作基本都是浮点计算。
GPGPU浮出水面
早期的GPU只能执行固定的程序,而不开放给程序员编程。随着时代的发展,图像处理
有时需要对着色器进行编程以实现一些特效,因此需要程序员可以使用GPU的汇编语言
写简单的着色程序。这自然对程序员要求过高,所以一些高阶的着色语言又被GPU厂商
开发出来。比如微软和NVIDIA共同开发的Cg语言,就能为顶点和像素编写专门的着色程
序。这类技术虽然面向图形渲染工作者,却吸引了一小簇科学计算研究者的兴趣。... 阅读全帖
t********e
发帖数: 1169
11
【 以下文字转载自 JobHunting 讨论区 】
发信人: mitbbs59 (bEQi), 信区: JobHunting
标 题: 本版1年以内的所有 面经题目,含帖子link [为大家方便]
发信站: BBS 未名空间站 (Fri Jan 29 14:20:44 2010, 美东)
不敢保证全部涵盖,大部分的都在。
我自己找了一遍,大家一起用着都方便。
不过只是含有题目的帖子 我才包含进来了,只分享经验没贴题目的 我都没有包含
进来。
大家复习着方便。
1. 一个sorted interger Array[1...N], 已知范围 1...N+1. 已知一个数字missing。
找该数字。
把原题改为unsorted,找missing数字。 performance。
2. 复制linked list。 已知每个节点有两个pointer,一个指向后一个节点,另一个指向
其他任意一节点。 O(n)时间内,无附加内存,复制该linked list。(存储不连续)
3. 一个party N个人,如果一个人不认识任何其他人,又被任何其他人认识,此人为
celeb... 阅读全帖
t********e
发帖数: 1169
12
【 以下文字转载自 JobHunting 讨论区 】
发信人: mitbbs59 (bEQi), 信区: JobHunting
标 题: 本版1年以内的所有 面经题目,含帖子link [为大家方便]
发信站: BBS 未名空间站 (Fri Jan 29 14:20:44 2010, 美东)
不敢保证全部涵盖,大部分的都在。
我自己找了一遍,大家一起用着都方便。
不过只是含有题目的帖子 我才包含进来了,只分享经验没贴题目的 我都没有包含
进来。
大家复习着方便。
1. 一个sorted interger Array[1...N], 已知范围 1...N+1. 已知一个数字missing。
找该数字。
把原题改为unsorted,找missing数字。 performance。
2. 复制linked list。 已知每个节点有两个pointer,一个指向后一个节点,另一个指向
其他任意一节点。 O(n)时间内,无附加内存,复制该linked list。(存储不连续)
3. 一个party N个人,如果一个人不认识任何其他人,又被任何其他人认识,此人为
celeb... 阅读全帖
z****e
发帖数: 2024
13
来自主题: Programming版 - simple question on C++ initialization list
除了死记硬背,lz可以这样理解这个问题,
在进入constructor的left openning brace { 之前,所有的subobjects 必须被
initilaized。包括基类和所有成员。不论你使用不使用初始化表符。
如果你不使用初始化表符,在进入{ 之前,编译器调用默认的基类构造函数。如果你使用初始化表符,在进入{ 之前,你自己调用基类的构造函数,(包括copy ctr)。
好,这就说明,初始化基类的成员,在进入 { 之前,只能通过编译器调用默认的基类构造函数,或者你自己调用基类的构造函数来实现。而基类在被初始的时候,在进入基类的{ 之前,基类的所有成员,也要被初始化。
所以,Base::_datum,是在进入Base的构造函数的{ 之前被初始化的,而不是你这个派生类的{ 之前。
这个同时也解释了,为什么初始化表符都是比构造函数赋值更高效,因为进入构造函数{ 以前,必须经历默认的初始化,或者自定义的初始化。进入构造函数以后,都是赋值了。
s*********9
发帖数: 241
14
我也是刚刚查到的,汗!以前都没有听说过~
1、任务可以调用任务,也可以调用函数;而函数只能调用函数,不能调用任务。
3、函数自少要有一个输入变量,而任务可以没有输入变量,也可以有一个或者多个输
入变量。
4、函数需要返回一个值,而任务则不返回值
2、函数的仿真函数只能与主模块共用一个仿真时间单位;而任务可以定义自己的仿真
时间单位。

发帖数: 1
15
来自主题: Military版 - 半导体这种材料只能两种状态吗

=====================
C++ 工程实践(4):二进制兼容性
原创 2011年03月09日 10:46:00 标签:c++ /library /interface /mfc /class /编译
器 22578
陈硕 (giantchen_AT_gmail)
Blog.csdn.net/Solstice
本文主要讨论 Linux x86/x86-64 平台,偶尔会举 Windows 作为反面教材。
C/C++ 的二进制兼容性 (binary compatibility) 有多重含义,本文主要在“头文件和
库文件分别升级,可执行文件是否受影响”这个意义下讨论,我称之为 library (主
要是 shared library,即动态链接库)的 ABI (application binary interface)。至
于编译器与操作系统的 ABI 留给下一篇谈 C++ 标准与实践的文章。
什么是二进制兼容性
在解释这个定义之前,先看看 Unix/C 语言的一个历史问题:open() 的 flags 参数的
取值。open(2) 函数的原型是
int open(cons... 阅读全帖
R****i
发帖数: 104
16
来自主题: JobHunting版 - 没有offer郁闷, 有offer头疼.(伤人品)
由于C++ name mangling (常考的一个C++的概念, 就是为什么编程语言支持ove
rride的原因之一) 的缘故, 两个函数在符号表(?)的表示并不一样.
一个是带有引用标识的, 另外一个是没有.
所以可以override, 编译没有问题.
问题在调用上面.当函数被调用的时候, 通过函数的参数类型来link符号表中的函
数. 这里就是问题的所在了. 调用函数的过程中可能出现ambiguity,也可能不出现.
这里就要用到 C++ reference的概念了.
C++ 的reference一定要refer到内存地址空间的一个东西(变量, 实例啊什么的). 不能
refer到一个没有地址空间的东西. 所以编译器会根据这个来选者调用的真正的函数,
或者报错.
比如 Fun(5, 5) 调用编译能通过, 而
int i = 5;
Fun(i, i); 编译就不会通过了.

.
right.
f****4
发帖数: 1359
17
非static成员函数指针的用法不是编译器的trick,那个是C++ syntax支持的。那个用
虚函数指针的才是编译器的trick。
所以只要你正常的用非static成员函数指针,正确调用是能保证的。
-非static成员函数指针是那个类的有效非static函数指针
-调用时instance有效
我前面那个例子
fakeFunc(102);
十有八九是Segmentation fault
再有一点
sf fakeFunc=(sf)&Function_pointer::next;
//warning: converting from ‘int (Function_pointer::*)(int)’ to ‘int (*)(
int)’
Function_pointer::f fps=(Function_pointer::f)&Function_pointer::current;
//error: invalid cast from type ‘int (*)(int)’ to type ‘int (Function_
pointer::*)(int)’
编译器是禁止你把static成... 阅读全帖
w***g
发帖数: 5958
18
来自主题: Programming版 - 请教c++数组初始化
我需要产生一系列同分布的哈希函数,想存在一个数组里。哈希函数的构造函数接受一
机函数生成器的引用用于产生随机数。这样顺序产生的哈希函数可以各不相同但属
于同

问题是new只能调用无参构造函数; vector允许调用无参或拷贝构造函数。拷贝构造函
数不
行因为产生的对象是完全一样的,而不是独立同分布的。
我目前的做法是定义一个无参构造函数,不干任何事情,再定义一个init方法做真正的
化。vector分配后用一个循环初始化每个元素。但我觉得这种做法不好,因为一开
始生
对象其实并没有真正初始化,如果忘了调用init就会出错。另外同时存在构造
函数和ini
非常混乱。
另一种方法是分配一个指针数组,然后挨个new。用完了挨个delete。感觉比较原始,
得判
断0指针什么的,也很不爽。
重载拷贝构造函数最简单,但是这样就没法保持“拷贝”的语义,也会引起混乱。
不知道有没有什么好的idiom或者现成的library可以用。
e********y
发帖数: 66
19
来自主题: Programming版 - windows下mfc,dll, etc.
我有一个在Visual studio 6 下开发的mfc的dll project,暂且叫它a.dll。现在想用cpputest来对其中每个class做unit test。对这个project不是很了解,主要是对windows的用visual studio开发的东西不熟,文档也没有,开发的人也走了。
这个project本身好像是个类似ocx的dll,它只export了DllGetClassObject,DllCanUnloadNow,DllRegisterServer,DllUnregisterServer这4个函数。这个dll本身好像是给别的ocx控件提供服务的。
为了unit test, 我在这个project中加了一个含有main函数的test.cpp文件,另外新加了一个configuration用来编译成win32 console。在test.cpp的main中调用afxwininit来支持mfc。试着做了一个简单的cpputest测试例来测试其中的某一个class,编译和跑测试例本身好像没问题。但是在程序退出时总有run time error的exception。跟踪进去发现P... 阅读全帖
D***n
发帖数: 6804
20
Delegate技术上说白了就是一种特殊调用函数的方法,和Hook很像。比如普通函数F()
里面运行流程是这样的:
A(); B(); C();
这个很死板,函数ABC预先要写好,编译/链接的时候必须能分别找到B的符号和实现。C
++的扩充思路是继承或者虚方法一类的,这个也必须在运行前就定死。
Delegate的思路是,不直接调用 B(),而是把B改成一个函数指针,平时指向一个特殊
值(比如self/NULL)。
(* B) (void ) = NULL;
上面程序变成
A();
if ( NULL != B) { //这个if可以控制B是must or optional
(*)B(x, y, z);
C();
这样在运行时B可以被动态赋予一个任意的函数指针。只要这个函数满足B希望的参数/
返回类型就可以了(比如参数必须是XYZ)。
在ObjC里,如果一个类型里有很多类似B这样的函数指针,就可以单独列出来形成一个
protocol,任何其他对象函数实现了这个protocol列出来的各种函数interface,再把
自己的地址赋予给B
B = & delegete;
当然在运行时,... 阅读全帖
a**********s
发帖数: 588
21
int main()
{
Derived *Var = new Derived();
>>>> 这个语句, 分别调用基类和派生类的构造函数, 于是
>>>> Constructor: Base //1
>>>> Constructor: Derived //2
Base Var2;
>>>> 这个语句, 调用基类构造函数, 于是
>>>> Constructor: Base //3
Var2 = (Base) *Var;
>>>> 这个语句有一丝丝复杂, 等号右边产生一个临时Base类型的变量,
>>>> 调用Base类的"拷贝构造函数" Base(const Base&), 但是
>>>> 这个你没有定义, 所以什么都没有打印出来
>>>> 临时变量消灭的时候, 调用析构函数, 于是:
Destructor : Base //4
delete Var;
>>>> 这个比较简单
>>>> Destructor : Derived //5
>>>> Destructor : Base //6
return 0;
>>>> 这个也比较简单, 因为Var1的生命周期随着函数的返回结束
>>>
W***i
发帖数: 9134
22
来自主题: Seattle版 - 原来Inception是一个。。。
ZZ一个
程序员强悍解析<盗梦空间>
上周末,终于在各种剧透和解构的隆隆声中看完了期待已久的《Inception》,不得不
说,不白花这些钱。
之前在豆瓣上看到一篇讲Inception里面的数学原理的帖子,其实哪有那么深奥。
依我看,Christopher Nolan简直就是个程序员的脑子,还到不了理论数学家的高度。
为什么说是程序员呢,让我把《Inception》用程序员的语言由浅入深地解释一下。
本片最主要的设定是什么呢?梦中梦对不对?这在程序的角度来说再直观不过了,那就
是——递归,如果做梦是一个函数Dream,那么梦中梦就是该函数的递归调用。
比起一般的递归调用来,该程序的特殊之处是,它是一个多线程的递归调用,也即是说
每一次递归都会新建一个线程来执行函数体。因此该递归函数有两种结束机制,一种是
wait超时(药物失效),另一种是由其调用函数来结束(kick)。
而由于硬件平台所限,该递归只能进行四层,因为每次递归都需要消耗系统资源,所以
递归深一层,系统运行就越慢(梦境每深一层,时间就变慢20倍)。一旦在第四层的时
候资源耗尽(做梦者生命耗尽),就会产生栈溢出,因此线程就会进
c*****m
发帖数: 1160
23
这段函数本来很简单,只要string加起来就可以了:
bool dos2ufolder(std::string& path)
{
WIN32_FIND_DATA finfo;
string newpath = path + "abcde" // should be "\\*";
g_Log->Log("in dos2ufolder, the newpath is: %s", newpath.c_str());
...
}
它会被这个dos2u调用:
bool dos2u(const char * path)
{
struct stat s;
string Path(path);
if( stat(Path.c_str(),&s) == 0 )
{
if( s.st_mode & S_IFDIR )
{
dos2ufolder(Path);
}
else if( s.st_mode & S_IFREG )
{
... 阅读全帖
d**d
发帖数: 389
24
来自主题: Programming版 - 关于C++中 extern "C"的问题。
有没有详细的说明什么情况下定义的函数要加extern "C"啊?
1. 没有使用/调用class的函数都属于 C 函数?
2. 只是用standard C library的函数? 就是只调用stdio.h, stdlib.h....的函数?
3. 哪些调用cstdio,cstdlib的函数是不是属于C 函数?
N******K
发帖数: 10202
25
调试程序A
A1是A里面的一个函数
A1可以是独立函数或者类的成员函数
在一个函数A1的某处断点停下之后,临时写一段程序B B调用另外一个程序C
程序B 可以调用函数A1内部的所有变量 如果A1是类的成员函数就可以调用this
然后运行程序B 程序B可以画个图 显示一个表 什么的
程序C提供画图显示表格的各种基本函数
t****t
发帖数: 6806
26
好了不开玩笑.
第一, 写一个库函数, 首先要完成的是调用者的要求, 其次才是考虑节约成本. 你从头
到尾没完成调用的要求, 节约成本根本就是一句空话. 交换对象和交换对象的指针, 是
两件完全不同的事情. 库函数能做的, 是提供两个版本由调用者决定调用哪个.
第二, 回到本来的题目. 如果调用者要求交换指针, 应该是调用者自己把指针的指针传
进来, 就象你写的一样. 而不是库函数自己别出心裁, 限制只能交换指针或者"推荐"使
用指针的版本. 从根本上来说, 交换两个对象就是交换两个对象(指针也是对象之一).
除非知道对象内部的结构(即类本身有moving semantics或者specialize swap), 否则
创建一个新对象是不能避免的.
r*****n
发帖数: 4844
27
前言
你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么
经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业
项目都看不出有什么实际作用,不如从工作中的需求出发)
建议:
不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至
少10年通用。
回顾一下历史,看看历史上时间线上技术的发展,你才能明白明天会是什么样。
一定要动手,例子不管多么简单,建议至少自己手敲一遍看看是否理解了里头的细枝末
节。
一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。
注:你也许会很奇怪为什么下面的东西很偏Unix/Linux,这是因为我觉得Windows下的
编程可能会在未来很没有前途,原因如下:
现在的用户界面几乎被两个东西主宰了,1)Web,2)移动设备iOS或Android。Windows
的图形界面不吃香了。
越来越多的企业在用成本低性能高的Linux和各种开源技术来构架其系统,Windows的成
本太高了。
微软的东西变得太快了,很不持久,他们完全是在玩弄程序员。详情参见《Windows编
程革命史》
所以... 阅读全帖
s**9
发帖数: 207
28
来自主题: JobHunting版 - 问问电梯设计elevator design的问题。
我是觉得这些解答没有考虑一个问题。考虑下面的场景:
乘客在1楼进电梯,按10楼。走到3楼,5楼有乘客按电梯。电梯停5楼,乘客上电梯,按
7楼。电梯继续上7楼,停,再到10楼。
假设电梯提供一个moveToFloor(int destination)的函数。在上面的场景中,设电梯在
1楼,bank调用elevator1.moveToFloor(10)。 moveToFloor(10)不能等电梯到了10楼
才返回,否则电梯不能停5楼。所以moveToFloor(10)应该给电梯设一个去10楼的任务,
把电梯设成向上运动,然后返回。这样就有一个问题,到了10楼谁来停电梯?我想的就
是除了buttonPush的事件,还应该有一个levelArrived事件,每到一层楼,该事件触发
一次,就是elevator提供一个levelArried(int)函数,每到一层楼,该函数被调用一
次。
我一开始假设单电梯的情况,没有bank,只有电梯和乘客,所以对怎么调用这个
levelArried函数有些问题。加上bank,由bank来调用levelArried,看起来就通顺了。
这个Message Disp
y*********e
发帖数: 518
29
来自主题: JobHunting版 - what is java enclosure-今天被hm问倒了
感觉对方是在问 Closure。
这个是 Java 对 Lambda 表达式的实现。Java 7 已经确定在语法上支持这个。
Java 6或者以前的版本只能靠 interface + anonymous class 来实现。
若是做过 functional programming(比如haskell),应该对 Lamdba 表达
式比较熟悉。
从C++的角度来看,就是 function pointer,但是它是 Strongly Typed。
举例代码来说明。假设要对二叉树遍历,代码很好写,比如:
void inOrder(Tree tree) {
if (tree != null) {
inOrder(tree.getLeft());
System.out.println(tree.getValue());
inOrder(tree.getRight());
}
}
但是如上的函数只是把Node的值打印到终端。若是要变得generic一点,要遍历的
过程中,能引入一个函数,对每一个Node执行这个函数,该多好。这样就引入了一
个概念:能... 阅读全帖
n******r
发帖数: 869
30
来自主题: JobHunting版 - 程序员技术练级攻略
贡献好文:
http://coolshell.cn/articles/4990.html
月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to
those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉
我,他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙,
于是,我让他把他的一些学习Python和Web编程的一些点滴总结一下。于是他给我发来
了一些他的心得和经历,我在把他的心得做了不多的增改,并根据我的经历增加了“进
阶”一节。这是一篇由新手和我这个老家伙根据我们的经历完成的文章。
我的这个朋友把这篇文章取名叫Build Your Programming Technical Skills,我实在
不知道用中文怎么翻译,但我在写的过程中,我觉得这很像一个打网游做任务升级的一
个过程,所以取名叫“技术练级攻略”,题目有点大,呵呵,这个标题纯粹是为了好玩
。这里仅仅是在分享Mailper和我个人的学习经历。(注:省去了我作为一个初学者曾
经学习过的一些技术(今天明显... 阅读全帖
q*********u
发帖数: 280
31
【 以下文字转载自 JobHunting 讨论区 】
发信人: yinyueyouge (隐约有歌), 信区: JobHunting
标 题: Re: java enclosure是什么-今天被hm问倒了
发信站: BBS 未名空间站 (Fri Oct 22 09:27:57 2010, 美东)
感觉对方是在问 Closure。
这个是 Java 对 Lambda 表达式的实现。Java 7 已经确定在语法上支持这个。
Java 6或者以前的版本只能靠 interface + anonymous class 来实现。
若是做过 functional programming(比如haskell),应该对 Lamdba 表达
式比较熟悉。
从C++的角度来看,就是 function pointer,但是它是 Strongly Typed。
举例代码来说明。假设要对二叉树遍历,代码很好写,比如:
void inOrder(Tree tree) {
if (tree != null) {
inOrder(tree.getLeft());
System.out.p... 阅读全帖
f**k
发帖数: 906
32
来自主题: Linux版 - 100伪币答谢Linux/Unix编程问题
背景:项目里面用到一个外部函数,函数只接收一个文件名,调用后将长时间写大量数
据。
任务: 需要在函数写数据的同时,就接近即时读数据。
调用函数的时候,如果文件已经存在,就fail。所以不能事先建立个同文件名的Pipe。
也曾经使用过pipe,然后dup2 那个file descriptor。问题是在调用函数以后,取不到
函数内部的file descriptor。
100伪币答谢。
f**k
发帖数: 906
33
来自主题: Programming版 - 100伪币答谢Linux/Unix编程问题 (转载)
【 以下文字转载自 Linux 讨论区 】
发信人: fork (笑叹词穷,古痴今狂 终成空), 信区: Linux
标 题: 100伪币答谢Linux/Unix编程问题
发信站: BBS 未名空间站 (Sat Mar 5 18:40:00 2011, 美东)
背景:项目里面用到一个外部函数,函数只接收一个文件名,调用后将长时间写大量数
据。
任务: 需要在函数写数据的同时,就接近即时读数据。
调用函数的时候,如果文件已经存在,就fail。所以不能事先建立个同文件名的Pipe。
也曾经使用过pipe,然后dup2 那个file descriptor。问题是在调用函数以后,取不到
函数内部的file descriptor。
100伪币答谢。
f*******t
发帖数: 7549
34
来自主题: Programming版 - 可微分编程
DL与FP的结合,会不会成为未来的编程方式呢?
Yann LeCun:深度学习已死,可微分编程万岁!
原创 2018-01-06 文强 新智元
【新智元导读】LeCun又发表惊人言论,继昨天参与深度学习论战、喷机器人Sophia后
,今天他在Facebook主页发文,称“深度学习已死,可微分编程万岁!”深度学习真的
死了?而可微分编程又是什么呢?
LeCun又语出惊人了,这次直指深度学习——
好,深度学习作为一个流行词,现在时效已过。
深度学习已死,可微分编程万岁!
事情要回溯到前天。
1月4日,AAAI前主席Thomas Dietterich连发10条Twitter,驳斥纽约大学心理学家Gary
Marcus对深度学习的批评。其中,Dietterich提到,
“深度学习本质上是一种新的编程方式——可微分编程——而且这个领域正试图用这种
方式来制定可重用的结构。目前我们已经有:卷积,池化,LSTM,GAN,VAE,memory单
元,routing单元,等等。”
这个说法让英伟达的AI架构VP Clement Farabet深表赞同,Farabet还评价说,这是对
现今深度学习的最好总... 阅读全帖
f*******r
发帖数: 976
35
来自主题: JobHunting版 - U电面经历
我的思路是用一个circular ring来实现,因为只要求最近10秒,这个ring只要保存11
个元素就可以了,每个元素保存一个pair p. p的第一个值是epoch time
的秒,第二个值是在该秒调用的次数。每次这个函数被调用,就查询一下最近10的总的
调用次数,如果超过了100次,就返回true。否则就返回false。C++代码如下:
class Counter {
private:
vector > counter;
int index;
const int times;
public:
Counter(int seconds, int ts) : counter(seconds+1), index(-1), times(ts) {}
bool quotaExceeded() {
time_t current = time(NULL);
long sum = 0;
for (int i = 0, e = counter.size(); i < e; ++i) {
... 阅读全帖
r***u
发帖数: 241
36
来自主题: JobHunting版 - Apple的一些C++概念题
很久没碰C++了,有一些没答好,但还是拿到了onsite
我记得的问题有:
1. struct 和 class的区别
2. 什么是partially specialized template
3. 如果一个程序在main函数执行前就crash了,是什么原因
4. 如何防止一个类被拷贝
5. 能不能直接调用析构函数
6. 什么是virtual function,效率如何,调用一次发生几次indirection
7. 32位机,一个类定义一个整数,一个虚函数,sizeof是多少。
另一个类定义一个整数,两个虚函数,sizeof是多少。
8. 能不能在constructor里面调用虚函数
y*******o
发帖数: 6632
37
来自主题: JobHunting版 - Apple的一些C++概念题
1. struct 和 class的区别
class default private, struct default public, nothing more
2. 什么是partially specialized template
3. 如果一个程序在main函数执行前就crash了,是什么原因
4. 如何防止一个类被拷贝
private assignment operator, private copy constructor
5. 能不能直接调用析构函数
yes
6. 什么是virtual function,效率如何,调用一次发生几次indirection
1 ?
7. 32位机,一个类定义一个整数,一个虚函数,sizeof是多少。
8
另一个类定义一个整数,两个虚函数,sizeof是多少
12
8. 能不能在constructor里面调用虚函数
never ever do it, according to effective c++
a****a
发帖数: 5763
38
经过6年时间,4个发行版,苹果终于完成了向64位的迁移,并随着Snow Leopard的发布
推出了解决并行编程问题的Grand Central Dispatch(简称GCD)技术,释放了多核系
统的潜力。
和10.5一样,在10.6 Snow Leopard中,苹果继续利用64位的迁移砍掉了诸多老技术,
很多新技术仅以64位的模式被支持。例如重写的QuickTime X框架,虽然QuickTime X应
用程序以32位和64位的模式发布,但其API仅暴露给64位。另一个例子是Objective-C 2
.1的运行库,快速Vtable调度,新的和C++统一的异常处理模型,以及彻底解决对象的
FBI问题等,都仅限64位程序使用。
内核的64位化
读者应该发现,经过这4个发行版,Mac OS X自下而上地对整个系统向64位迁移。10.3
内核空间提供了64位整数运算的支持。10.4允许程序以64位模式运行在用户空间,并且
提供了64位的libSystem使得开发者可以开发64位的Unix程序,而10.5中系统所有未废
弃的函数库、框架都提供64位版本,到了10.6,所有用户空间的程序,包括... 阅读全帖
j**7
发帖数: 771
39
来自主题: Programming版 - 请教一个c语言实现多线程的问题
嗯。
不过我这些个并行的线程要调用自己写的一个比较大的函数,而且要调用很多次,倒没
有标准库里的函数,这样的话是不是就一定不会泄露呢??
查到一个说法:
如果在除主线程之外的任何线程中进行一下操作,你就应该使用多线程版本的C
runtime library,并使用_beginthreadex和_endthreadex:
1 使用malloc()和free(),或是new和delete
2 使用stdio.h或io.h里面声明的任何函数
3 使用浮点变量或浮点运算函数
4 调用任何一个使用了静态缓冲区的runtime函数,比如:asctime(),strtok()或rand()
这么说来基本啥都不能用了。beginthread能用waitForSingleObject来等待么?
X****r
发帖数: 3557
40
来自主题: Programming版 - c++类未完成初始化,如何引用this?
Test(this);并没有调用同一个对象的另一个构造函数,它创建了一个新的临时对象。
你不能在一个构造函数里调用另一个构造函数。把共同的部分提出来成为一个新函数,
让两个构造函数都调用它。
d**d
发帖数: 389
41
来自主题: Programming版 - 请教一个C++的设计问题
这个就是我一开用C的写法,每个decoder去主程序register一下回调函数和解码函数。
对于C++,我原先想的是如果每个decoder的class都定义一个static的格式判断函数和
static decoder* geInstance(),然后都在主程序登记一下。主程序还是用loop来调用
每一个decoder的格式判断函数,如果是正确的格式,再调用getInstance(),然后调用
解码函数。这样的话用C++类的写法也没有太多的优势。
还是有更好的设计方法和思路?
v***a
发帖数: 365
42
来自主题: JobHunting版 - 一道design pattern的问题
Finery 类里存了protected Person component;
比如:tshirt 存的 Person 是 trouser;
tshirt 调用 base.Show() 调用的是 Finery 的 show(),然后 Finery 调用的是 他存
的那Person 的 Show(),也就是 Trouser.show(),
然后 recursive
design pattern 的书都有讲的,而且讲得很详细,
说白了就是一个Hook,在调用想要调用的函数之前,先调用你的,然后你再替它调用原
始函数
S**I
发帖数: 15689
43
来自主题: JobHunting版 - [合集] 收到G家拒信,发面经
☆─────────────────────────────────────☆
recursive (递归) 于 (Mon Apr 11 10:56:49 2011, 美东) 提到:
大半夜收到HR的thank you note。不用管什么NDA了
本人ECE fresh PhD,背景是电路/EDA,跟G业务基本没什么关系
同学内部推荐的,很简单的一次电面就给了onsite
题都不难,但是自己没把握好机会,出了一些小bug。
总的感觉,出错就是硬伤,宁可从最简单的算法写起,也不能出错。
电面:
1,Skip list, http://en.wikipedia.org/wiki/Skip_list
写code实现struct skip_list * find(struct skip_list *head, int value)
2,sorted array with repeated elements
for given element, find out its range.
e.g. A A B B B B B C C D D E F G, given B, the out... 阅读全帖
N****w
发帖数: 21578
44
来自主题: Linux版 - 靠,有些人真是闲得。。。
这位毛德操先生的名字真有喜感。。。
兼容内核是由中国的浙大网新有限公司在2005年9月发起的自由软件项目。作为项目负
责人,毛德操先生提出了项目的设想和和开发路线。他写了一系列阐述具体实现兼容内
核的文章,这些文章的汇编为兼容内核白皮书[1]。根据的兼容内核白皮书,兼容内核
开发的主要工作是在Linux内核中实现“一个框架和两个界面”:
一个符合Windows设备驱动程序的特征和要求的框架,即Windows设备驱动框架,使得可
以把多个Windows设备驱动模块装入内核,并使这些模块间的关系和运行条件跟它们在
Windows内核中时相同。
一组由Windows内核导出(Export)函数界面(见Windows DDK)定义的导出函数。对于设备
驱动程序而言,这些函数就相当于由内核提供的库函数。
Windows的系统调用界面。微软并没有公开它的系统调用界面,但是在“Windows NT/
2000 Native API Reference”和其他资料中已经揭开了这个秘密。在Linux内核中实现
Windows的系统调用界面,就相当于用汇编语言来实现另一种高级语言。这是因为,在
内核里面,
b********r
发帖数: 1080
45
来自主题: Programming版 - C++里用Blas/Lapack的问题 (转载)
【 以下文字转载自 Computation 讨论区 】
发信人: bankbuster (恭喜发财), 信区: Computation
标 题: C++里用Blas/Lapack的问题
发信站: BBS 未名空间站 (Tue Aug 9 14:57:49 2011, 美东)
我用atlas,程序里简单调用zgeev函数。编译没有错,没有警告。运行也不出错,但结
果完全不对。似乎函数根本没有被调用。
另外哪里能找到在C或者C++下调用Blas/Lapack函数的具体格式?我这里函数参数还是
在网上搜的。完全没有相关的手册。难道Blas/Lapack只是给fortran用的?
程序如下
#include
#include
#include
#include
#include
using namespace std;
typedef complex dcomplex;
extern "C" void zgeev_( char* jobvl, char* jobvr, int* n, ... 阅读全帖
m*********a
发帖数: 3299
46
来自主题: Programming版 - 请教C++11的rvalue ref
void Foo(X&& x);
x可以是temporary object, unnamed variable就是不用命名的variable就可以调用这个
void Foo(X& x);
x是named object,x就是bound到调用函数的 object,没有copy,改x就是改调用函数的
object
void Foo(const X& x);
x是named object,x就是bound到调用函数的 object,没有copy,但是限制了改x的权利,
无法改
r****y
发帖数: 26819
47
之所以有这个想法,是因为没看懂代码。
myFunction是定义为调用一个匿名函数的结果:
var myFunction = function() {...}();
而不是定义为这个匿名函数。
myFunction(1)调用的不是myFunction的定义里的匿名函数,因为myFunction本身是
一个函数,所以myFunction(1)是在调用inner function,所以理所当然有一个参数。

should
p******e
发帖数: 528
48
我的这个问题和这里的讨论有些类似。
http://stackoverflow.com/questions/8804830/python-multiprocessi
实际上是我的程序调用了一个别人写的代码。我怀疑这个代码里边定义了一个函数
f,然后函数f又内部调用了一个函数g。这在单线程的python code里边没问题。但当我
用这个Parallel库(https://pythonhosted.org/joblib/parallel.html
来同时运行两个函数f的时候,那个函数g没法被正常的pickling。问题是我没有权限去
改那个原来的函数f。也没法具体去看它时怎么内部实现的。
所以我想知道在python有没有办法同时开始运行2个完全独立的程序,就像他们各自
是一个单线程程序一样。我其实有个傻办法。就是把函数f的输入变量都写到硬盘去。
然后再写一个独立的运行函数f的程序叫a.py,然后并行运行2个os.system(“Python a
.py”)。
不过这个方法确实不是什么好办法。
b********r
发帖数: 1080
49
来自主题: Computation版 - C++里用Blas/Lapack的问题
我用atlas,程序里简单调用zgeev函数。编译没有错,没有警告。运行也不出错,但结
果完全不对。似乎函数根本没有被调用。
另外哪里能找到在C或者C++下调用Blas/Lapack函数的具体格式?我这里函数参数还是
在网上搜的。完全没有相关的手册。难道Blas/Lapack只是给fortran用的?
程序如下
#include
#include
#include
#include
#include
using namespace std;
typedef complex dcomplex;
extern "C" void zgeev_( char* jobvl, char* jobvr, int* n, dcomplex* a,
int* lda, dcomplex* w, dcomplex* vl, int* ldvl, dcomplex*
vr, int* ldvr, dcomplex* work, int* lwork, double* r... 阅读全帖
b********r
发帖数: 1080
50
来自主题: Computation版 - C++里用Blas/Lapack的问题
我用atlas,程序里简单调用zgeev函数。编译没有错,没有警告。运行也不出错,但结
果完全不对。似乎函数根本没有被调用。
另外哪里能找到在C或者C++下调用Blas/Lapack函数的具体格式?我这里函数参数还是
在网上搜的。完全没有相关的手册。难道Blas/Lapack只是给fortran用的?
程序如下
#include
#include
#include
#include
#include
using namespace std;
typedef complex dcomplex;
extern "C" void zgeev_( char* jobvl, char* jobvr, int* n, dcomplex* a,
int* lda, dcomplex* w, dcomplex* vl, int* ldvl, dcomplex*
vr, int* ldvr, dcomplex* work, int* lwork, double* r... 阅读全帖
首页 上页 1 2 3 4 5 6 7 8 9 10 (共10页)