論C++標準委員會制定的一條不合理的標準

論C++標準委員會制定的一條不合理的標準C++標準委員會不讓for後()中定義的變數在外邊用,我覺的非常不合理在我做的太極語言中是這樣設計的,()中的名字註冊進入首個含名字空間的母垣(垣的概念大家都知道了吧),中間如果經過了{}則要加序號標記。for()中定義的變數讓不讓在外邊用曾經是一個爭議挺大的問題.在太極語言中是這樣考慮的:單獨從for本身考慮兩方面的意見不好確定,把目光放向全域.就是看()中定義的變數是否要全地區可見.在太極語言中講究"做一件事情只要一句話",讓緊密關聯的代碼能寫在一句中

C++設計的一個小缺陷——不必強制類普通成員函數在類體中聲明

C++設計的一個缺陷,是否應該提交給C++標準委員會呢?——不必強制類普通成員函數在類體中聲明類普通成員函數非得在類中聲明了才能在外邊寫成員函數,C++為什麼非得設計成這樣呢?1.如果想增加一個函數,那麼同樣的函數頭要寫兩遍,這違反了資訊唯一原則。造成難於維護難於同步等問題。2.想在庫外為庫中的類增加成員函數在目前的這種設計下是不可能的。比如我想為MFC庫的CString類增加一個自訂的tostring()函數就做不到。我想應該這樣設計,類普通成員函數可以直接在外部定義,而不用在類中聲明比如CS

C++設計的又一個缺陷——建構函式與解構函式名稱不應該用類名

C++設計的又一個缺陷,是否應該提交給C++標準委員會呢?——建構函式與解構函式名稱不應該用類名如果用類名,那麼就是一個資訊冗餘class test{    test();    test(int,int,char *);    test(...);    ...}現在我要更改test為test2,就需要更改四個地方,維護困難。class test2{    test2();    test2(int,int,char *);    test2(...);   

“C++之父BS說林銳錯了”之原因

“C++之父BS說林銳錯了”之原因前天發了一個貼子“C++之父BS說林銳錯了”C++之父的C++聖經《C++程式設計語言

用C++類比DELPHI的set資料類型.

很多時候,我希望能用一個變數方便的表示多種狀態.例如我有一個視窗類別,要表示此視窗是否具有系統功能表,最小化按鈕,最大化按鈕,協助按鈕,可能需要四個變數來記錄.bool hasSystemMenu;bool hasMinimize;bool hasMaximize;bool hasHelp;這樣要佔用更多的記憶體.雖然用位域可以節約記憶體,但操作不方便. DELPHI這點就做得不錯,用set of 關鍵字聲明一個集合類型資料.如下:  TWindowButton =

一鍵在emacs中切換C++ .h檔案和.cpp檔案

一直用emacs寫c++程式,有時候要在.cpp和.h檔案中切換,下面的代碼可以實現這個功能(綁定到了F11上),要使用的話添加到.emacs檔案中即可,鬱悶的是調試的時候,因為太久沒用Regex了,忘了"."符號有特殊的含義而沒有加轉義符,花了不少時間來查錯 :-(      .另外也有.hpp結尾的C++源碼檔案(例如boost),有需要時可以修改;;定義在cpp檔案和.h檔案中切換的函數;;;###autoload(defun switch-source-file () 

給C++添加屬性機制(繼,得到成員在類中的位移)

接上篇,時間不夠,寫得較亂我上一篇給C++添加屬性機制的文章中,讓屬性類得到目標類的類指標,我使用了一個INIT_PROPERTY宏,在前幾天和龍子龍孫聊天時,他告訴了我一個技巧,得到類成員在類中的位移地址,如下(int)(&((type_name*)NULL)->member_name) 例如我有個類 Aclass A{public:    virtual int show() {}    int i1, i2;};則 (int)(&((A*)NULL)->i2)

C++失去競爭力了嗎?

網友“圖靈評論”的一篇“C++失去競爭力了嗎?《C/C++ User's

C#不允許聲明函數體內的static變數,為何?

學習C#中……今天發現,C#居然不支援在函數體內聲明static變數,這真的是很古怪,難道一個static變數的就一定要讓別人知道嗎(至少會被類的其他成員知曉)?下邊的C#和C++的比較,很明顯,C++在這一點上要合理很多,uniqueID這個不斷遞增、控制著唯一ID的重要變數,永遠不會被類裡的其他成員無意破壞掉,不知道為什麼C#不允許這種“函數體內部的static變數“,狂汗……//這是C#代碼,uniqueID_只能是類的靜態成員//而不能是Foo()函數的函數體內靜態成員class

C字串操作函數實現

下面是部分C字串操作函數的實現,或許在某些筆試時可以用到!#ifndef NULL#define NULL ((void *)0)#endif/*memcpy的實現代碼*/void* memcpy(void *pDst, void *pSrc, int iLen){char *pTmp = (char *)pDst;char *pTmp2 = (char *)pSrc;if(0 == iLen)return pDst;while(iLen--)*pTmp++ = *pTmp2++;return

C語言一句話知識

 1.   class和struct的區別class和struct的用法沒什麼區別,只是class預設的成員變數是private,而struct預設是public。2.   printf列印一個string時不要忘記使用%s看代碼便知:int main(){    char string[] = “Hello c programmers %dd”;    printf(string);    return 0;}3.  

簡單好玩的C++關鍵字mutable

mutable是一個好玩的C++關鍵字,也是我第一次遇到。於是查了查msdn,結果發現果然是好玩的關鍵字。首先,它只能修飾非const,非static的類資料成員。其次,它用來突破const函數。再次,它就這麼一個功能。class X{public:// 在邏輯上GetFlag只是擷取我的m_flag狀態,所以修飾為const// 但是,我需要知道其中一些動態狀態,所以mutable就誕生// 了,而且專門為此而誕生。bool GetFlag()

C++:memset ,memcpy 和strcpy 的根本區別?

#include "memory.h"memset用來對一段記憶體空間全部設定為某個字元,一般用在對定義的字串進行初始化為‘ ’或‘/0’;例:char a[100];memset(a, '/0', sizeof(a)); memcpy用來做記憶體拷貝,你可以拿它拷貝任何資料類型的對象,可以指定拷貝的資料長度;例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),會造成b的記憶體位址溢出。 strcpy就只能拷貝字串了,它遇到'/0

C語言常見問題列表

 6.13 http://c-faq.com/aryptr/ptrtoarray.html 問:我應該怎樣定義一個指向數組的指標? 答:通常情況下,當大家談及指向數組的指標時,實際上指的是一個指向數組第一個元素的指標,比如講: int arr[3] = {1, 2, 3};int *ptr = arr;printf("*ptr=%d/n", *ptr);   // *ptr=1 嚴格地講,這裡的ptr實際上是指向數組arr的第一個元素1的指標,而不是指向數組的指標,即ptr是int*類型的指標,

插入排序演算法C語言實現

#include <stdlib.h>#include <stdio.h>//插入排序voidmain(){ int a[]={0,2,3,7,5,2,9,3,1,98,29}; int t; for(int i=1;i<sizeof(a)/sizeof(*a);i++) { //將賦值移除內迴圈進行加速 t = a[i]; int j; //從右向左檢查元素是否有序,

小技巧:C++限制一個方法只能在某個類當中被調用

一個類A有方法func1,有時候我們希望這個func1隻在某個特定的類B中被調用。以下是一種實現方法:template<class T>class FriendAccess...{   friend typename T; // error if write class keyword instead of typename here, but okay if typename is ignored,

C++實現排列組合

 很多地方都遇過排列組合,比如計算問題的規模,資料的大小,佔用磁碟空間多少等。原理部分借鑒網上一篇文章,道理已經說的很清楚就不重複了。(1) 全排列:全排列表示把集合中元素的所有按照一定的順序排列起來,使用P(n, n) = n!表示n個元素全排列的個數。例如:{1, 2, 3}的全排列為:123;132;213;231;312;321;共6個,即3!=3*2*1=6。這個是怎麼算出來的呢?首先取一個元素,例如取出了1,那麼就還剩下{2,

C++中類的大小問題

以下的討論都是在不用#pragma pack( num

將N層集合對象自動轉化為對應的.NET泛型對象(C++)

昨天別人碰到的問題,晚上回來想了一下給出了一個用模板進行類型推導的解決方案。問題本身需求很清楚,就是需要寫一個Util函數,將C++裡面的那些模板(template)集合對象自動轉換成.NET裡面的泛型(Generic)集合對象,比如將vector<int>轉化成List<int>^。因為類型(Type)不定,所以用模板來進行轉化是不二的選擇。問題的痛點在於這些集合類還可以是巢狀型別,也就是說集合裡面裝的還是集合(比如將vector<vector<int>

C++類overlode、override和overwrite詳細解釋

overload(重載),即函數重載:在同一個類中;函數名字相同;函數參數不同(類型不同、數量不同,兩者滿足其一即可);不以傳回值類型不同作為函數重載的條件。override(覆蓋),用於實現C++中多態:分別位於父類和子類中;子類改寫父類中的virtual方法;與父類中的函數原型相同。overwrite(重寫):與overload類似,但是範圍不同,是子類改寫父類;與override類似,但是父類中的方法不是虛函數。

總頁數: 4314 1 .... 2221 2222 2223 2224 2225 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.