@陳梓瀚(vczh)
用不變量來表示狀態(tài)碉堡了,呵呵,我以前怎么沒想到。這樣能區(qū)分POD和class。云風(fēng)說沒有狀態(tài)估計說的是POD。
我覺得contract并不僅僅指能做什么事情,還包括做事情前后的狀態(tài)應(yīng)該是什么樣子
typedef int(__stdcall*f[10])(int(*a)(int, int));
這個不是:“f是一個數(shù)組,數(shù)組返回了一個函數(shù)指針,……”。數(shù)組不會返回什么東西的啊。我覺得用typedef來解釋更清楚。上面的typedef等價于:
typedef int (*A)(int, int);
typedef int (__stdcall*F)(A);
F[10];
RET XXX::FUNC(...) const;和
RET XXX::FUNC(...);
也構(gòu)成重載
社會化大生產(chǎn)的方式?jīng)Q定了不可能把每個人都發(fā)揮到極致的,而是選取每個人的特長來進行組合。
很多好的軟件,不是天才的設(shè)計,便是經(jīng)驗老道的設(shè)計。初出茅廬的,可能還在技術(shù)細節(jié)層面糾纏呢。不妨問自己:我是天才嗎?我經(jīng)驗足夠嗎?
“別人把軟件設(shè)計好,詳細到偽碼級別了,我只是來做最低級的實現(xiàn)而已。”樓主意識到這個并開始有想法是好的,只不過別太著急了。
最后,兩個聰明人合作會使事情變糟,那是因為他們不夠聰明,或者說光有智商沒有情商。解雇之。寧要情商,不要智商。古往今來成功人士,智商高的有多少不好說,但情商絕對都是咣咣的。
re: In the USA - 4[未登錄] raof01 2008-12-23 22:35
謝謝了先
re: In the USA - 4[未登錄] raof01 2008-12-23 22:34
我試了下練習(xí)1.6,好像永遠都算不完,為什么呢?練習(xí)1.7呢?我沒有思路。
第一,是bitwise initialization,member-wise copy。——這話是Inside C++ Object Model里說的,我也認同這種觀點。
第四,不會遞歸調(diào)用基類CCF,但會遞歸調(diào)用個成員的CCF。——越俎代庖,做個補充:)
@jmchxy
按成員遞歸復(fù)制。不是按位復(fù)制。
其他同意你的觀點。
@浪跡天涯
我們已經(jīng)被大環(huán)境綁架了。
@匿名
每個人成功的標準都不一樣。
趁著年輕努力工作學(xué)習(xí)。
大體上很贊同博主。這些是任何一個有責(zé)任感的人都必須做到的。
我也覺得codeblocks好用。如果在linux上,vim+plugins會是相當好的選擇,anjuta也不錯。
當然,如果在win上開發(fā)app或者做prototype,還是vs比較好,畢竟是RAD工具嘛。
如果不做RAD,自己編寫makefile和腳本來管理src樹、進行開發(fā)能極大提高效率
reinterpret_cast:重新解析位模式bit pattern。
如:
TYPE * t = new TYPE();
unsigned long ul = reinterpret_cast<unsigned long>(t);
delete t;
為你的努力鼓掌。
但是……我覺得這些沒有必要翻譯過來。一個合格的程序員,一定要feel comfortable with English。全世界都是如此
強烈反對盜版
強烈反對M$
強烈盼望人民收入水平大幅提高
強列盼望加大打擊盜版的力度
靠,別誤會了,只是說這篇應(yīng)當參考TCPL,寫得簡潔點。
@David Lee
類里面的函數(shù)是成員函數(shù),不可能是全局的。
static成員函數(shù)不是全局的,它的scope是類,在全局范圍內(nèi)可以訪問,但不是全局函數(shù)。因為它操作的是該類相關(guān)的東西。類里面是不會有g(shù)lobal scope的東西的。c++中訪問全局函數(shù)應(yīng)該使用::。
內(nèi)存上應(yīng)該一樣(not very sure),都是獨立于對象存在的。區(qū)別是static成員函數(shù)沒有隱含的this參數(shù)而普通成員函數(shù)有。
@sPhinX
M$的東西與GCC有差異。各自實現(xiàn)了標準的大部分,有自己的擴展。對于標準中“it depends”的東西就形態(tài)各異了。
另外,const的保證是由編譯器來保證的,你看我畫的那個圖。
就算構(gòu)造const對象,也需要修改這個內(nèi)存啊。對象構(gòu)造完成const才能起作用,否則怎么構(gòu)造/初始化?
第三條結(jié)論怎么得出的?
分析得不錯,就是有點麻煩。TCPL里指針講得比較好,簡明扼要。
代碼沒問題。M$對C++做了修改,這是不兼容標準的地方
re: 宏和inline的區(qū)別[未登錄] raof01 2008-09-01 09:48
宏是簡單的字符串替換。
inline是將代碼插入到調(diào)用點——并非原封不動插入。compiler有權(quán)決定是否真的inline。
re: 車通 面試題[未登錄] raof01 2008-08-29 11:23
malloc后沒有free。破題
第二題是悖論。類里聲明的函數(shù)有全局的?新鮮。賜教?
re: 莫名科技面試題[未登錄] raof01 2008-08-29 10:01
結(jié)果 4 11 100 400 4 3 4 6 8 4 4
這個與機器有關(guān)。考題應(yīng)當避免任何與特定平臺相關(guān)的東西,除非考的就是某平臺。
char->int轉(zhuǎn)換是promotion,無需static_cast。reinterpret_cast用于重新解釋(reinterpret)bit pattern。
只有第10題稱得上夠勁——描述不清楚啊,哈哈:
1、內(nèi)核與用戶之間拷貝?
2、src和dest有重疊?
3、考慮效率?
4、訪問權(quán)限?
5、src和dest均非NULL但是否可訪問?
……
啥公司啊,一看題就知道不咋地。
其實當把const int X = 10;放到頭文件中作為全局變量,這是X就有了internal linkage,可以將其作為常量使用,T a[x];不再非法。
re: C++中常見名詞解釋[未登錄] raof01 2008-08-29 09:27
兄弟你把IDE里的概念和C++本身的概念混淆了。查一下C++標準,就沒有AppWizard。
@白金漢宮
老譚居然還會c++?肯定是垃圾。C++最好的入門書是BS的TC++PL。
const:表明該對象是read only的,也可以用來表示常量,但不是所有的編譯器都支持這個特性。這也就是為什么const int X = 10; T a[X];在使用某些編譯器編譯時是非法的。
* 用來保護對象不受修改。
* const成員函數(shù),只能訪問const成員——當然不包括logical constness。
* const參數(shù),表明該參數(shù)不可被函數(shù)修改,一般作用于T*或者T&。
* T * const和T const *(const T*)的區(qū)別。從右向左讀就能明白區(qū)別。傳參時,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++無法編譯。
re: C語言作用域、聲明以及定義[未登錄] raof01 2008-08-28 14:49
對于obj1來說,通過ptr修改obj2并沒有修改obj1所引用的內(nèi)存區(qū)。這個obj1的bit pattern不變。
昨天看見你給我的評論,今天就看見這個了。:)
這里并不是打破了bitwise constness。如圖:
obj1
------
| data1|
|------| obj2
|ptr---+--> -----------------
------ |Can be modified |
|without breaking |
|bitwise constness|
-----------------
re: 對臨時變量的引用[未登錄] raof01 2008-08-27 15:39
能否操作臨時變量,就看你有沒有辦法獲取他的地址。
re: 對臨時變量的引用[未登錄] raof01 2008-08-27 15:38
@<a href=
http://minidx.com>minidxer</a>
臨時變量是可以操作的
如:
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,那么上面的函數(shù)應(yīng)該等價于:
void foo()
{
static int a = 10;
}
可能嗎?
考慮這種情況:
void foo()
{
int const a = 10;
a++;
}
如果const默認是static,那么上面的函數(shù)應(yīng)該等價于:
void foo()
{
static int a = 10;
a++;
}
可能嗎?
(*it).m;
it->m;
與
(*it)->m;
相同嗎?
OMG!看了這么多留言才知道,只有kevin lynx和博主——當然也包括本人——知道討論的是什么問題。
IMHO,其他人該好好鞏固一下基礎(chǔ)了。
@abettor,@theanswerzju
IMHO,你們對于變量的定義理解存在問題。參考“C/C++:如何理解復(fù)雜的聲明”(
http://blog.chinaunix.net/u/12783/showart_378340.html)。
變量定義一次就分配一次存儲。多次包含global.h,則多次為STR_TEST分配空間。編譯器正常是因為分開編譯。鏈接異常是因為有多個存儲叫做STR_TEST,通過STR_TEST引用存儲存在二義性。
而且inclusion guard是防止一個h被重復(fù)包含,而不是在一個cpp里重復(fù)包含。最基礎(chǔ)的書籍關(guān)于這點也是很清楚的。
與inclusion guard無關(guān)。
const 變量默認是 static 的?誰說的?
multiple definition并不是由其constness不正確而導(dǎo)致的。
char * const p = "....";(p為常量,存放在常量表中,鏈接時沒問題)或者static char * p = "....";(限制p的作用域為編譯單元,但p可修改)即可,因為字符串本身是字面常量,不能修改。
因此,你這里的錯誤是由于全局變量使用錯誤導(dǎo)致的,與const無關(guān)。按照你最初的定義,在多個cpp中包含該global.h就相當于多次定義了STR_TEST。因此鏈接時會出錯。
const char STR_TEST[] = "Hello world!";這里有個拷貝操作,相當于多用了一倍的空間。
建議你看看“C++:一些基礎(chǔ)知識”(
http://blog.chinaunix.net/u/12783/showart_548200.html)3和4條