Haste Makes Waste.

Thoughts are but dreams till their effects be tried. -- William Shakespeare

C++博客 首页 新随笔 联系 聚合 管理
  0 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks
共2页: 1 2 
(deep-reverse 1)运行失败
@陈梓瀚(vczh)
用不变量来表示状态碉堡了,呵呵,我以前怎么没想到。这样能区分POD和class。云风说没有状态估计说的是POD。
我觉得contract并不仅仅指能做什么事情,还包括做事情前后的状态应该是什么样子
typedef int(__stdcall*f[10])(int(*a)(int, int));
这个不是:“f是一个数组,数组返回了一个函数指针,……”。数组不会返回什么东西的啊。我觉得用typedef来解释更清楚。上面的typedef等价于:
typedef int (*A)(int, int);
typedef int (__stdcall*F)(A);
F[10];
RET XXX::FUNC(...) const;和
RET XXX::FUNC(...);
也构成重载
社会化大生产的方式决定了不可能把每个人都发挥到极致的,而是选取每个人的特长来进行组合。

很多好的软件,不是天才的设计,便是经验老道的设计。初出茅庐的,可能还在技术细节层面纠缠呢。不妨问自己:我是天才吗?我经验足够吗?

“别人把软件设计好,详细到伪码级别了,我只是来做最低级的实现而已。”楼主意识到这个并开始有想法是好的,只不过别太着急了。

最后,两个聪明人合作会使事情变糟,那是因为他们不够聪明,或者说光有智商没有情商。解雇之。宁要情商,不要智商。古往今来成功人士,智商高的有多少不好说,但情商绝对都是咣咣的。
re: In the USA - 4[未登录] raof01 2008-12-23 22:35
谢谢了先
re: In the USA - 4[未登录] raof01 2008-12-23 22:34
我试了下练习1.6,好像永远都算不完,为什么呢?练习1.7呢?我没有思路。
第一,是bitwise initialization,member-wise copy。——这话是Inside C++ Object Model里说的,我也认同这种观点。
第四,不会递归调用基类CCF,但会递归调用个成员的CCF。——越俎代庖,做个补充:)
@jmchxy
按成员递归复制。不是按位复制。
其他同意你的观点。
@浪迹天涯
我们已经被大环境绑架了。
标题很吸引人,内容很让人失望。
@匿名
每个人成功的标准都不一样。
趁着年轻努力工作学习。

大体上很赞同博主。这些是任何一个有责任感的人都必须做到的。
BS的TC++PL
我也觉得codeblocks好用。如果在linux上,vim+plugins会是相当好的选择,anjuta也不错。
当然,如果在win上开发app或者做prototype,还是vs比较好,毕竟是RAD工具嘛。
如果不做RAD,自己编写makefile和脚本来管理src树、进行开发能极大提高效率
reinterpret_cast:重新解析位模式bit pattern。
如:
TYPE * t = new TYPE();
unsigned long ul = reinterpret_cast<unsigned long>(t);
delete t;
我也没看出问题。
re: read/write(1) -- read[未登录] raof01 2008-09-12 13:09
为你的努力鼓掌。
但是……我觉得这些没有必要翻译过来。一个合格的程序员,一定要feel comfortable with English。全世界都是如此
强烈反对盗版
强烈反对M$
强烈盼望人民收入水平大幅提高
强列盼望加大打击盗版的力度
靠,别误会了,只是说这篇应当参考TCPL,写得简洁点。
对图形学没概念。飘过
@David Lee
类里面的函数是成员函数,不可能是全局的。

static成员函数不是全局的,它的scope是类,在全局范围内可以访问,但不是全局函数。因为它操作的是该类相关的东西。类里面是不会有global scope的东西的。c++中访问全局函数应该使用::。

内存上应该一样(not very sure),都是独立于对象存在的。区别是static成员函数没有隐含的this参数而普通成员函数有。
@sPhinX
M$的东西与GCC有差异。各自实现了标准的大部分,有自己的扩展。对于标准中“it depends”的东西就形态各异了。

另外,const的保证是由编译器来保证的,你看我画的那个图。
就算构造const对象,也需要修改这个内存啊。对象构造完成const才能起作用,否则怎么构造/初始化?
第三条结论怎么得出的?

分析得不错,就是有点麻烦。TCPL里指针讲得比较好,简明扼要。
代码没问题。M$对C++做了修改,这是不兼容标准的地方
re: 宏和inline的区别[未登录] raof01 2008-09-01 09:48
宏是简单的字符串替换。
inline是将代码插入到调用点——并非原封不动插入。compiler有权决定是否真的inline。
re: 车通 面试题[未登录] raof01 2008-08-29 11:23
malloc后没有free。破题
这家公司也不咋地
第二题是悖论。类里声明的函数有全局的?新鲜。赐教?
re: 莫名科技面试题[未登录] raof01 2008-08-29 10:01
结果 4 11 100 400 4 3 4 6 8 4 4
这个与机器有关。考题应当避免任何与特定平台相关的东西,除非考的就是某平台。

char->int转换是promotion,无需static_cast。reinterpret_cast用于重新解释(reinterpret)bit pattern。

只有第10题称得上够劲——描述不清楚啊,哈哈:
1、内核与用户之间拷贝?
2、src和dest有重叠?
3、考虑效率?
4、访问权限?
5、src和dest均非NULL但是否可访问?
……

啥公司啊,一看题就知道不咋地。
其实当把const int X = 10;放到头文件中作为全局变量,这是X就有了internal linkage,可以将其作为常量使用,T a[x];不再非法。
还应当考虑对象切片以及包含虚拟的情况。
http://blog.chinaunix.net/u/12783/showart_476048.html
兄弟你把IDE里的概念和C++本身的概念混淆了。查一下C++标准,就没有AppWizard。

@白金汉宫
老谭居然还会c++?肯定是垃圾。C++最好的入门书是BS的TC++PL。

const:表明该对象是read only的,也可以用来表示常量,但不是所有的编译器都支持这个特性。这也就是为什么const int X = 10; T a[X];在使用某些编译器编译时是非法的。

* 用来保护对象不受修改。
* const成员函数,只能访问const成员——当然不包括logical constness。
* const参数,表明该参数不可被函数修改,一般作用于T*或者T&。
* T * const和T const *(const T*)的区别。从右向左读就能明白区别。传参时,T * const与T*等价。还有const T * const,表明该对象以及其指向的对象都是read only的。
* const返回值:返回的对象是readonly的。
Base* b = (Base*)100;
Derived* d1 = reinterpret_cast( b );
Derived* d2 = static_cast( b );
这三句有问题。至少g++无法编译。
对于obj1来说,通过ptr修改obj2并没有修改obj1所引用的内存区。这个obj1的bit pattern不变。
昨天看见你给我的评论,今天就看见这个了。:)
这里并不是打破了bitwise constness。如图:
obj1
 ------
| data1|
|------|      obj2
|ptr---+--> -----------------
 ------    |Can be modified  |
           |without breaking |
           |bitwise constness|
            -----------------
看来我的理解也不够深刻……
能否操作临时变量,就看你有没有办法获取他的地址。
@&lt;a href=http://minidx.com&gt;minidxer&lt;/a&gt;
临时变量是可以操作的
如:
int main()
{
long l = 2222;
char const &s = l;
int *p = reinterpret_cast<int*>(const_cast<char *>(&s));
*p = 88;
printf("%ld, %c\n", l, s);
return 0;
}
考虑这种情况:
void foo()
{
int const a = 10;
}

如果const默认是static,那么上面的函数应该等价于:
void foo()
{
static int a = 10;
}

可能吗?
考虑这种情况:
void foo()
{
int const a = 10;
a++;
}

如果const默认是static,那么上面的函数应该等价于:
void foo()
{
static int a = 10;
a++;
}

可能吗?
@金庆
c++标准哪里有?把原话贴过来啊。
(*it).m;
it->m;

(*it)->m;
相同吗?
OMG!看了这么多留言才知道,只有kevin lynx和博主——当然也包括本人——知道讨论的是什么问题。

IMHO,其他人该好好巩固一下基础了。
@komac
你没有理解博主的意思。
@abettor,@theanswerzju
IMHO,你们对于变量的定义理解存在问题。参考“C/C++:如何理解复杂的声明”(http://blog.chinaunix.net/u/12783/showart_378340.html)。

变量定义一次就分配一次存储。多次包含global.h,则多次为STR_TEST分配空间。编译器正常是因为分开编译。链接异常是因为有多个存储叫做STR_TEST,通过STR_TEST引用存储存在二义性。

而且inclusion guard是防止一个h被重复包含,而不是在一个cpp里重复包含。最基础的书籍关于这点也是很清楚的。

与inclusion guard无关。
const 变量默认是 static 的?谁说的?

multiple definition并不是由其constness不正确而导致的。
char * const p = "....";(p为常量,存放在常量表中,链接时没问题)或者static char * p = "....";(限制p的作用域为编译单元,但p可修改)即可,因为字符串本身是字面常量,不能修改。

因此,你这里的错误是由于全局变量使用错误导致的,与const无关。按照你最初的定义,在多个cpp中包含该global.h就相当于多次定义了STR_TEST。因此链接时会出错。

const char STR_TEST[] = "Hello world!";这里有个拷贝操作,相当于多用了一倍的空间。

建议你看看“C++:一些基础知识”(http://blog.chinaunix.net/u/12783/showart_548200.html)3和4条
共2页: 1 2