この板見てるとC++良いって意見ばっかなんだが

このエントリーをはてなブックマークに追加
570デフォルトの名無しさん
ドトネトのSystem::Generics::Listはヒドいとおもた。
571デフォルトの名無しさん:2008/01/23(水) 23:48:15
QValueVector< QString >
572デフォルトの名無しさん:2008/01/24(木) 00:11:55
STLのコンテナとアルゴリズムよりエレガントな設計のコンテナなんて見たことねーぞ
573デフォルトの名無しさん:2008/01/24(木) 00:22:41
>>506
そもそも、MFCの前身が作られた時期には、STLは未だ承認されていない。
574デフォルトの名無しさん:2008/01/24(木) 00:27:35
ぁ ゃι ぃ
575デフォルトの名無しさん:2008/01/24(木) 00:33:17
MSC7.0が1992だっけか
576デフォルトの名無しさん:2008/01/24(木) 01:41:10
>>572
美しさと効率は、必ずしもいっちしない
577デフォルトの名無しさん:2008/01/24(木) 01:59:50
でも、STLってそんな効率悪い実装をせざるを得ない仕様だったっけ?
578デフォルトの名無しさん:2008/01/24(木) 06:03:34
中身までちゃんとみてないが、vectorは単に[]で
アクセスするだけでも、ただの配列の2倍以上は遅い。
at()だとさらに遅い。
DEBUGビルドだとさらに10倍くらい遅い。

何でもかんでもvector使うのはさすがにアレだな
579デフォルトの名無しさん:2008/01/24(木) 07:43:43
馬鹿がいる。
580デフォルトの名無しさん:2008/01/24(木) 12:26:29
>>578

んなぁーこたない。
581デフォルトの名無しさん:2008/01/24(木) 13:39:31
>>573

そうだとしてもSTL完成した時点で揃えりゃいいだろ?
582デフォルトの名無しさん:2008/01/24(木) 15:36:44
>>580
こんな感じで時間計ると、Debugビルド(最適化なし)で100倍くらい差が付く。
最適化ありのReleaseビルドでも3倍は差がつくんだが、何か俺が間違ってるのか?

std::vector<int> vec(2);
int ary[2];
DWORD time1, time2;

ary[0] = 1;
vec[0] = 1;

time1 = GetTickCount();
for(int i=0; i < 10000000; i++) {
ary[0] += 1;
ary[1] = ary[0];
}
time1 = GetTickCount() - time1;

time2 = GetTickCount();
for(int i=0; i < 10000000; i++) {
vec[0] += 1;
vec[1] = ary[0];
}
time2 = GetTickCount() - time2;
583デフォルトの名無しさん:2008/01/24(木) 16:09:57
>>581
何故MFC3.0以上にもなって互換性犠牲にして使われてもいないSTLに擦り寄る必要があるんだ?
584デフォルトの名無しさん:2008/01/24(木) 16:10:51
vectorがはやったったぞ
#include <iostream>
#include <vector>
using namespace std;
main(){
std::vector<int> vec(2);
int ary[2];
DWORD time1, time2;

ary[0] = 1;
vec[0] = 1;

time1 = GetTickCount();
for(int i=0; i < 10000000; i++) {
ary[0] += 1;
ary[1] = ary[0];
}
time1 = GetTickCount() - time1;

time2 = GetTickCount();
for(int i=0; i < 10000000; i++) {
vec[0] += 1;
vec[1] = ary[0];
}
time2 = GetTickCount() - time2;
cout<<time1<<" "<<time2;}
585デフォルトの名無しさん:2008/01/24(木) 16:12:26
>>583
おまいばかじゃね?
M$がMFCを亡き者にしてドトネトに逝こうしてるのに。
MFC終焉。
586:2008/01/24(木) 16:19:07
1994年にドトネトはない
587デフォルトの名無しさん:2008/01/24(木) 16:20:28
STL.NET
588デフォルトの名無しさん:2008/01/24(木) 16:23:53
>>587
劣化パチモン
589デフォルトの名無しさん:2008/01/24(木) 18:54:17
>>582
Visual C++か?
それならSTLの仕様ではなく、実装の問題。
セキュリティ対策で範囲チェックが入るから、素の配列に比べて遅くなる。
_SECURE_SCLを0に定義しておけば範囲チェックは無くなる。
また、&vec[0]でポインタを得て操作するという手もある。

俺もVC++ 9でそのコードをコンパイルしてみたが、
/O2や/Oxだと配列のループは消滅する。
ダミーの関数呼出を入れて、_SECURE_SCL 0定義してやれば/O2や/Oxで両者互角だった。

Cの関数と違って_sみたいな見た目の違いが出ないから見た目わからないけど、
C++ライブラリも安全対策へ注力しているのが近頃のVC++。
590デフォルトの名無しさん:2008/01/24(木) 18:57:35
>>589
なるほど、そういうことだったのね。
591デフォルトの名無しさん:2008/01/24(木) 19:11:17
MSってこれだから嫌なんだよ
なんでもかんでもMSルールで染め上げようとするんだもの
592デフォルトの名無しさん:2008/01/24(木) 19:28:57
何もしなければ、セキュリティ対策がなっていないと叩かれるネタになる。
やってもやらなくても叩かれるMS涙目w
593デフォルトの名無しさん:2008/01/24(木) 21:37:05
人気者だから仕方ないんじゃね?信者もアンチも人気の証。
594デフォルトの名無しさん:2008/01/25(金) 01:00:08
Dinkumware?(もう忘れた。確かVC++に付属してる奴)それともSTLport?
自分は直接試してないから強くは主張できないけどね。

でも、STLってかなりよくできてると聞いたけど最適化についてはわからない。
案外、ライブラリによってはIntel C++と相性が悪いかもしれないどろうけど
どうだろ?

少なくともValarrayよりはましだと思うけど。

595デフォルトの名無しさん:2008/01/25(金) 01:02:11
↓qsort対std::sortネタが振られる
596デフォルトの名無しさん:2008/01/25(金) 01:37:52
ここでPrologに一票ww
597デフォルトの名無しさん:2008/01/25(金) 08:35:55
>>596
プロローグ?プロログ?どっちが正しいん?
598デフォルトの名無しさん:2008/01/25(金) 08:42:48
Windowsには期待するけどVC++には期待しません。

Vi$taはガカーリだたので、Win7頑張って。
599デフォルトの名無しさん:2008/01/25(金) 23:28:52
というか、at()があるのにoperator[]も範囲チェックするってどんだけ馬鹿なの。
600デフォルトの名無しさん:2008/01/25(金) 23:52:23
iostream キモチワルス
601デフォルトの名無しさん:2008/01/26(土) 01:49:08
>>599
それだけプログラマが当てにされない現実。
602デフォルトの名無しさん:2008/01/26(土) 02:12:16
>>597
プロログ
603デフォルトの名無しさん:2008/01/27(日) 13:07:15
>>599
>>601
at()は範囲チェックで例外、operator[]はassertじゃなかったっけ。
604デフォルトの名無しさん:2008/01/27(日) 13:46:58
>>603
なるほどね。メモリ保護に任せると割当単位によってはSEGVにならないし、reserveして書くみたいな馬鹿コードも検出できるからまあ確実ではあるか>assert
605デフォルトの名無しさん:2008/01/27(日) 23:57:36
>>582
その手のテストは最適化効いてコード消されてて速くなってる場合もあるぞー。
実際俺のとこだとそのintの配列はReleaseだとアセンブリはごっそりなく
なっててループしてない。
vectorの方はoperatorとか通るからか、勝手な最適化は効かないでご丁寧に
ループしてる。
606デフォルトの名無しさん:2008/01/28(月) 00:11:05
てかさ、vectorの利点というのは実体が&vec[0]から連続して
並んでいることが保障されていることでしょ。

だから、普通はループ処理とかで、vec[0]=とかやらないって。
ポインタ取り出して操作するに決まってるじゃない。
607デフォルトの名無しさん:2008/01/28(月) 01:17:39
>>582
参照されないint配列のfor操作とかは最適化されて消える。
後ろで配列内の値を参照(sum取って表示とか)するようにすると同一になるはず。
というか試してみたがvectorとint配列の[]で速度に差は出ない。
608デフォルトの名無しさん:2008/01/28(月) 09:11:37
vectorのポインタが変わってしまうのは要素数が増えたとき、
でしたっけ?
609デフォルトの名無しさん:2008/01/28(月) 10:01:06
先頭の要素が削除されたら?
610デフォルトの名無しさん:2008/01/28(月) 11:29:06
>>608>>609
いいえ。
611デフォルトの名無しさん:2008/01/28(月) 14:43:24
要素数がリザーブサイズを超えたときに再配置かな。
612デフォルトの名無しさん:2008/01/28(月) 22:23:34
stringの[]遅い・・
string 7813
vector 1594
char[] 1578
こんな感じだった
613デフォルトの名無しさん:2008/01/28(月) 22:36:13
VC6においては、
stringの reference operator[](size_type _P0)
{if (_Len < _P0 || _Ptr == 0)
return ((reference)*_Nullstr());
_Freeze();
return (_Ptr[_P0]); }

vectorの[] reference operator[](size_type _P)
{return (*(begin() + _P)); }
614デフォルトの名無しさん:2008/01/30(水) 01:52:50
いつまでもふたりこのままで
いっしょにいたいとねがうように
それはほんのいっしゅんで
ひかるほしにかわってゆく
だれよりもいちばんちかくで
えがおのゆくへをだきしめたい
めぐりあえたこのきせき
ずっとずっとゆめのなかからさめないように
615デフォルトの名無しさん:2008/01/30(水) 02:02:01
いいそひだえめず?
616デフォルトの名無しさん:2008/01/30(水) 03:05:17
でょほほりのあず
617デフォルトの名無しさん:2008/01/30(水) 04:04:14
抗しろああしろざま
618デフォルトの名無しさん:2008/02/01(金) 18:58:09
けっきょく九割くらいはMFC書いてるだけだろ
619デフォルトの名無しさん:2008/02/02(土) 18:52:30
M$の中の人ですか
620デフォルトの名無しさん:2008/02/02(土) 21:46:17
流れぶった切るけど、ネームスペースのエイリアス切れる機能が便利だと思う。
シンボル名単体か、フルパッケージ名をタイプするしか選択肢がない言語に戻ると
ちょっとキツい。
結果的に、同時に使いそうなクラスのこと考えて結構長いクラス名になりがちな気がするし。
621デフォルトの名無しさん:2008/02/02(土) 23:50:04
流れどころか、最近は澱んでた印象。
622デフォルトの名無しさん:2008/02/02(土) 23:55:40
>>620
マクロ定義すれば、なんとかなるんじゃね。
623デフォルトの名無しさん:2008/02/03(日) 02:44:54
そういえば、Javaで100以上もある分岐条件とかってどうやって表現する?
具体的にはネットワークプログラミングで受け取ったパケットの先頭8ビットを見て処理を分けるような場合。
CやC++だったら、構造体と、関数ポインタがあるから、例え分岐条件が1万あったとしても

for (int i = 0; i < sizeof(構造体A); i++) {
if (構造体A[i] == receiveData) {
構造体A[i].処理();
}
}

ってかなり短く表現できるじゃん?これって他の言語だとどうやるんだ?
スレ違いかもしれんが、前々から疑問だった。
624623:2008/02/03(日) 02:46:52
あ、しばらくCを書いてないからバグってるや。
if分の比較は以下に修正。、

if (構造体A[i].data == receiveData) {
625デフォルトの名無しさん:2008/02/03(日) 03:07:24
>>623
Windowsメッセージのように数千あるメッセージをswitch/caseで処理するのだ。
これが最速。後は好みでその上にクラスでもかぶせりゃいい。
626623:2008/02/03(日) 03:42:34
>625
返事ありがとう。私もJavaではif/elseもしくはswitch/caseで書いている。
でもその方法、最速なのはわかるけど、コード量増えるよね。
コピペミスとかもおきやすいし。
条件が増えてcaseの後にダラダラと条件がつくと理解しにくいと思う。

構造体で条件を一元管理すると、Excelからコピペで持ってこれるし、
ソースで見ても、きれいで見やすいし
条件が一個増えたとしてもすぐに対応可能だから、
なんで構造体使えないのかと思うわけですよ。

条件が一個増えた場合↓
if ((構造体A[i].data == receiveData) && (構造体A[i].state == state)){

100以上ある、switch/caseで条件の数がcaseごとに違うのとかって
バグっているんじゃないかと不安になる。
627デフォルトの名無しさん:2008/02/03(日) 03:55:50
構造体、クラスを比較しろよ
628デフォルトの名無しさん:2008/02/03(日) 04:21:33
>>623
for (int i = 0; i < クラスA.length; i++) {
if (クラスA[i].isEqual(receiveData)) {
クラスA[i].処理();
}
}
629デフォルトの名無しさん:2008/02/03(日) 04:25:02
その構造体の関数ポインタに処理をセットする部分はswitch/caseと同程度の
コード量になるはずじゃないのか?
630デフォルトの名無しさん:2008/02/03(日) 04:26:34
メッセージマップみたいなのをExcelの仕様書から自動生成するんじゃね?
631デフォルトの名無しさん:2008/02/03(日) 04:39:27
switch/caseを自動生成させても同じじゃないのか?
632デフォルトの名無しさん:2008/02/03(日) 06:53:48
for if を展開してコンパイラに渡せばよい
633623:2008/02/03(日) 11:30:34
>628
クラスAの配列ってことは、receiveData と比較する、
クラスAのインスタンス変数dataに値を設定する箇所が必要だよね?
あと、呼ばれるメソッド名を、きれいにクラスに渡せる?

>629
struct test
{
int a[2];
void (*pf[])();
};

const struct test test1[] = {
               {0x0001, funcPointer1},
               {0x0002, funcPointer2},
               {0x0003, funcPointer3}
              };

分岐条件が増えたとしても

const struct test test1[] = {
               {0x0001, 0x0003, true, false, funcPointer1},
               {0x0002, 0x0003, true, false, funcPointer2},
               {0x0003, 0x0003, true, false, funcPointer3}
              };
どんどん増えていくけど、私には一覧で見えるのですごく見やすい。
634デフォルトの名無しさん:2008/02/03(日) 12:07:38
C++なんてどんどん使われなくなってくだろ
635デフォルトの名無しさん:2008/02/03(日) 12:22:05
LLになれるとC++なんて二度と使いたくないって気になる。
636デフォルトの名無しさん:2008/02/03(日) 12:25:23
普段は LL で、性能が気になる所だけ C のモジュールを作るというのが良いよね
LL 拡張専用言語として使うなら C++ より C の方が効率的だし活用範囲が広い
637デフォルトの名無しさん:2008/02/03(日) 12:25:51
C++ってLispだなって思うw
638デフォルトの名無しさん:2008/02/03(日) 12:35:40
Lisp くらいパースが簡単で、Lisp くらいマクロが強力で、
REPL が備わっていたら良いんだけどね。
639デフォルトの名無しさん:2008/02/03(日) 13:57:55
Javaのガーベッジコレクションは欠陥設計
そもそも、スタティック領域を持つことが
許されているんだから、誰かがグローバル域に
オブジェクト参照持ち続けてたら、どんどんメモリーを
圧迫していく。
最悪なことにJavaはメモリー管理を意識しなくて良いような
嘘がまかり通って、知的障害者がぼこぼこオブジェクトを作っては
放置していく。
はっきり言ってC/C++の方がよっぽどまし。
素人を使ってWEBアプリとか作るって頭おかしいでしょ(w
640デフォルトの名無しさん:2008/02/03(日) 14:01:23
>623
C/C++の関数ポインターってvirtualで表現できるだろ
根本的に抽象化してないオブジェクト設計がおかしい
641デフォルトの名無しさん:2008/02/03(日) 14:32:15
LLとC(C++)があればJavaの出番はないんじゃないかって最近思う
642デフォルトの名無しさん:2008/02/03(日) 14:33:53
趣味でLLを作るときはC++が良い感じw
643デフォルトの名無しさん:2008/02/03(日) 14:46:48
>>639
他の言語を貶しても誰も褒めてくれないよ。
不服なら、その言語スレで、解決方法を提案してみなされ。
644デフォルトの名無しさん:2008/02/03(日) 15:20:55
>>633
interface func {
  public abstract void func();
}
class test {
  public int data;
  func func;
  public test(int data, func func){
    this.data = data;
    this.func = func;
  }
}
class func1 implements func {
  public void func() {}
}
final class funcs {
  static final test[] test1 = {
    new test(0x001, new func1()),
    new test(0x002, new func2()),
    new test(0x003, new func3())
  };
}
645デフォルトの名無しさん:2008/02/03(日) 15:58:05
> LLになれるとC++なんて二度と使いたくないって気になる。

中高生向け学習用言語で誰でも書けるhtml出力コードを安い労働単価で
書き続けていてください。
646デフォルトの名無しさん:2008/02/03(日) 16:04:42
>>645
中高生相手にムキになるなよ。
647デフォルトの名無しさん:2008/02/03(日) 16:15:32
LOGOの時代がきます。
648デフォルトの名無しさん:2008/02/03(日) 16:20:23
>>647
http://dolittle.eplang.jp/index.php?Logo%BE%F0%CA%F3%BC%BC
>LOGOは過去の言語です。ロゴ坊もすでに開発を終えていますので、
>興味のある方は後継のプログラミング言語「ドリトル」など新しい言語をお使いください。

過去の言語になってるじゃねーかwww
649デフォルトの名無しさん:2008/02/03(日) 16:22:48
そういう評価の質は評価者の質と対になっている物だよな。
ドリトルを勧める評価者の評価ってどうなんだろう。
650デフォルトの名無しさん:2008/02/03(日) 16:33:31
>>649
しらねwww
651デフォルトの名無しさん:2008/02/03(日) 16:38:13
OS開発に採用された時点でC/C++はもう勝ち組言語。
OSのあらゆる機能に容易にアクセスできるわけで。

実際ここ数十年は結局、オブジェクト指向とか関数型とか簡単とかを
売り文句にした一山いくらの言語がはやりすたりしただけで、どれも
C/C++の薄いラッパーに過ぎないね。
652デフォルトの名無しさん:2008/02/03(日) 16:41:12
つまり FFI で OS のあらゆる機能に用意にアクセス出来る Lisp は最強と言う事か。
ラッパーも要らんし。確かに C は OS 開発言語として不動の位置を占めているが、
C++ は C があるからいつ居なくなっても困らんな。
653デフォルトの名無しさん:2008/02/03(日) 16:46:51
>>649
変な意見も、無知が見れば結構まともっぽく見えちゃうから危険だよな。
654デフォルトの名無しさん:2008/02/03(日) 16:47:27
>>652
Lisp最強にするには、まずはLispマシンはやらせるとっからじゃね。
655デフォルトの名無しさん:2008/02/03(日) 16:55:04
JavaもC#も、夢を叶えようと頑張ってC++の仕様から色々引き算してシンプルさを意識したけど、
だんだん「広く深く濃く」使われていくうちに、現実をちゃんと見なきゃいけなくなって
結局はどんどん複雑怪奇になっていってる。

「俺が世界の支配者ならこの世は理想郷に限りなく近いのに」と思ってた思春期のボーヤが、
働き始めて数年経ってようやく、自分がツバ吐きかけてたものがいかに「現実を切り抜ける」ために
有効だったか思い知り始めたという感じ。
656デフォルトの名無しさん:2008/02/03(日) 16:59:46
まあWin32APIもLinuxのシステムコールもインターフェースがCだからね。
C/C++以外はどれもラッパーが必要になる。

ただまあ難しい事やらない限りは言語なんてどれでもできること同じだし、
なんつーか言語なんてOSとかアルゴリズムを利用するためのインターフェースに
過ぎないんだよね。
657デフォルトの名無しさん:2008/02/03(日) 17:00:40
>>655
そこで妥協したら負けかなと思ってる。
658デフォルトの名無しさん:2008/02/03(日) 17:07:18
>>656
それはそうだけどさ、デモ用の簡単なツールとか、自分が楽するための
ツール作成にはLLって限りなく便利。で、Perlはもともとそのための
言語じゃなかったのだろうか。

Javaが目指した理想は素晴らしいものだったけど。
659デフォルトの名無しさん:2008/02/03(日) 17:11:43
>>655
それでもC++よりは余計な機能が削ぎ落とされてていいと思う
660デフォルトの名無しさん:2008/02/03(日) 17:18:08
>>656
WindowsはPASCAL呼び出しじゃね。
661デフォルトの名無しさん:2008/02/03(日) 17:40:56
>>659
君の思うC++の余分な機能ってなによ?
662デフォルトの名無しさん:2008/02/03(日) 17:46:52
そもそも作るものによって言語変えること自体がすげー不便。
せいぜいC++とPerlくらいでいいよ。
663デフォルトの名無しさん:2008/02/03(日) 17:52:35
>>659
余計な機能は使わなければいい。C++はそれができる。

たとえば、パフォーマンスが理由で特定のメンバ関数を仮想関数にしたくないならそれが自由にできる。
文字列処理も、パフォーマンスを理由に固定長のバッファにしたいとか、好きなレベルの処理を自由に実装できる。
自由なんだ。

664デフォルトの名無しさん:2008/02/03(日) 17:58:12
>>662
Perlはなぁ・・・本当に自分しかソースさわらないもの限定ならいいけどさw
665デフォルトの名無しさん:2008/02/03(日) 18:08:13
>>661
C++というものの性格上しょうがないとはいえ、まずdelete
ようはガベージコレクションのありなしで、これを解決するには
ライブラリの知識を得る必要がある
そして、STLでも頻繁に使われる演算子オーバーロード
これも可読性を下げる
個別にあげつらうことは出来ないが、複雑怪奇な文法のせいで
IDEのエラー検出機能や補完機能が制限されるのもマイナス
666デフォルトの名無しさん:2008/02/03(日) 18:09:47
>そして、STLでも頻繁に使われる演算子オーバーロード
>これも可読性を下げる

バカまるだし
667デフォルトの名無しさん:2008/02/03(日) 18:14:11
>>660
typedef追っかけてくと最終的に__stdcallに辿り着くよ
668デフォルトの名無しさん:2008/02/03(日) 18:16:09
>>660
stdcall
引数のスタックの積み上げは右から左=C(cdecl)
スタックポインタの引き戻しはサブ側で行う=PASCAL∴可変長引数は×
669デフォルトの名無しさん:2008/02/03(日) 18:17:16
>>666
標準入出力の<<などは、意味を知ってるから便利に思えるものの、
初見で見たら多くの人は戸惑うのではないか?
演算子オーバーロードの乱用を誘発する悪しき例とも言える
演算子オーバーロードの乱用で可読性が下がるってのは良く言われてること
馬鹿だけが言ってるわけではない
670デフォルトの名無しさん:2008/02/03(日) 18:17:39
>>665
演算子のオーバーライドが可読性を下げるというのは、使い方間違ってないか?。
deleteもガベージコレクタが無いから、ライブラリが補ってるって事で、余計な機能ではない。ライブラリの選択で必要な機能だけを追加してるのだ。
671デフォルトの名無しさん:2008/02/03(日) 18:19:31
>>670
逆に言えば、ガーベッジコレクションがないということで、deleteや
ライブラリのポインタの機能など余計な機能をくっつけざるを
得なかったってことだろ
672デフォルトの名無しさん:2008/02/03(日) 18:26:46
余計な機能は使わなければいいって言うが、他人が使う以上そうも言ってられないんだよな
673デフォルトの名無しさん:2008/02/03(日) 18:28:29
言語の組み込み機能が増えるよりいいだろ
実際不自由してないし
674デフォルトの名無しさん:2008/02/03(日) 18:30:02
C++が設計されたときにもうGCはあったの。C++が参考にした言語は
GCがついてて遅すぎたの。実用性を重視してGCを外したの。で、一番使われる
ようになったの。
コンピュータ速くなってきたからJavaはうっかりGCで設計しちゃったの。
でも、また結局遅い遅いと叩かれちゃったの。
だからね、言語みたいな基本的なところは速くなくっちゃいけないの。
675デフォルトの名無しさん:2008/02/03(日) 18:30:03
>>671
ガベージコレクションってよしあしじゃない?プログラマが本当の意味で、
メモリを管理できない。スマートポインタで十分なように思う。

で、プログラマって本当にいわれるようにメモリが管理できないもの?
メモリリークで痛い目見た経験はあるけど。本当に数えるくらいしかない。
676デフォルトの名無しさん:2008/02/03(日) 18:34:57
>>674
そんな経緯はどうでもいい
C++が今現在余計な機能を持っていると思うことに変わりはない

>>675
例えば、スマートポインタも、auto_ptr、shared_ptr、weak_ptrといろいろあって
それぞれの特徴、使い方を覚えなくてはいけない
その時点でかなり「余計な機能」だと思う
正直言って、weak_ptrだけで十分
あと、良し悪しなのは当然で、余計かどうかは個人個人の主観でしかない
もともと好き嫌いを話してるだけなのだからこれは当たり前
677デフォルトの名無しさん:2008/02/03(日) 18:34:59
俺はoperator<<<とかoperator===とかもOKにしてもらいたいくらいだぜ

System.out.print("Hello");
より
cout << "Hello";
でおk
678デフォルトの名無しさん:2008/02/03(日) 18:38:04
>>677
まあ確かに<<は便利な点もあると思う
しかし、<<の意味がわかってる今だからいいだけで、
最初は戸惑うだろうし、真似して変な文脈で<<を
使い出す馬鹿が続出するという欠点もある
679デフォルトの名無しさん:2008/02/03(日) 18:46:54
C++は多重継承とテンプレートがどうかと思うな
二つを組み合わせたりするから意味わからん
680デフォルトの名無しさん:2008/02/03(日) 18:54:51
>>676
経緯を知らないからお前の知識が浅いんだと思う
681デフォルトの名無しさん:2008/02/03(日) 18:58:35
>>680
ちなみに、C++と設計と進化は読んでて、ガーベッジコレクションの
経緯は知っていたが
682デフォルトの名無しさん:2008/02/03(日) 18:59:01
>>676
それはGCとか余計な機能が無いって事ではないのか?
683デフォルトの名無しさん:2008/02/03(日) 19:00:08
>>682
どっちを余計と捉えるかという主観の問題だね
量的にも後者にまつわるルールの方が多いと感じるが
684デフォルトの名無しさん:2008/02/03(日) 19:00:52
くくって書くととエラーになる
685デフォルトの名無しさん:2008/02/03(日) 19:04:25
なんかGCを基本機能に入れるかどうかなんて古典的な議論だな。
新しい言語作るからどうしようって言うんならわかるが、C++はなしだし、
Javaはありだしって事実について言いあってなにを発見したいんだ?
686デフォルトの名無しさん:2008/02/03(日) 19:29:25
>>675
GC をプログラマの負担低減だけで捕らえるとそうなる
スループットの向上やフラグメンテーション対策と考えると
必要性が見える。なんで鯖向けに向いているかも
687デフォルトの名無しさん:2008/02/03(日) 19:38:26
<<676
今はauto_ptrしか無いぞ。
あと次の標準ではauto_ptrはdeprecatedになるから安心しろ。
688デフォルトの名無しさん:2008/02/03(日) 19:42:17
んなこた知ってるよw
689デフォルトの名無しさん:2008/02/03(日) 20:04:03
力比べでつか?
690デフォルトの名無しさん:2008/02/03(日) 20:07:18
691デフォルトの名無しさん:2008/02/03(日) 20:10:03
692デフォルトの名無しさん:2008/02/04(月) 09:12:17
C/C++用のガベージコレクタライブラリなんてのもあるのな。
693デフォルトの名無しさん:2008/02/04(月) 10:54:06
あの,友人が「プロトタイプベースの言語最高」とか
叫んでいたんですが,それってクロージャで代用
できたりしませんか?

C++の次の規格でにラムダ式とクロージャが使えるように
なったら,「C++最高」って叫んでもいいですか?
694デフォルトの名無しさん:2008/02/04(月) 11:59:21
それって何ていう、「C++ってCで代用できたりしませんか?」


できません。
695デフォルトの名無しさん:2008/02/04(月) 22:03:03
boostのラムダは苦しすぎるしうまいこと言語に入れてもらいたいもんだね
696デフォルトの名無しさん:2008/02/04(月) 22:15:23
プロトタイプ・ツール作成用にLL、本格アプリ用C++の2つマスターすればよいでFA?
697デフォルトの名無しさん:2008/02/04(月) 23:28:25
>>696
それだけでいいって言われたら、あなたは満足してそれだけで学ぶことをやめてしまう
だろうから、「それだけでは不十分」といってあげる。俺って、なんて優しいのだろう!
698デフォルトの名無しさん:2008/02/04(月) 23:59:31
皆はやっぱBASICからはじめたんだよね。もちろん。
699デフォルトの名無しさん:2008/02/05(火) 01:45:48
>>696
C++ の代わりにその LL の実装言語 or 拡張言語をやっておくと良いよ
ま、大抵は C だけど
700デフォルトの名無しさん:2008/02/05(火) 04:31:45
>>696
それなりの経験があると、C++のノウハウが高いのでプロトタイプ作るのに
言語変える方がめんどくさいんだよな。
えーっとPerlでBase64はどうするんだったっけな・・CPANのなんかだっけ・・
より、OreBase64 b64(buf); b4.Decode();とか、えーっとRubyでソケットは
Socket.new(・・第一引数はSocket::AF_INETだっけ・・・あれ?selectとか
使えたんるんだっけRubyは?、えーっとよりOreSocket s; s.Connect("google");
とかになっちまうんだよな。
さらにプロトならGUIつけることも多いから困るんだよな。PerlでGUIか・・
VBの方がいいかな・・っつーとやっぱ、よいしょOreWindow w; w.Show();
ってやるんだよなあ。

昔、ノウハウとかライブラリが貧弱だったころはスクリプトよく使ってたん
だけど、最近はプロト作る用途でもほとんど必要なくなっちまったよ。
まあ俺みたいな10年選手のおっさんにはこういうやつ結構いるんだがさ。
701デフォルトの名無しさん:2008/02/05(火) 05:21:58
「プロトタイプベースの言語」という言葉を理解しているレスが
一つしかない。気がする。
702デフォルトの名無しさん:2008/02/05(火) 05:32:16
と693が言ってるぞ
703デフォルトの名無しさん:2008/02/05(火) 06:33:13
ざっくりプロト作るぜ、のプロトじゃねーよ。
おっさんだから仕方ないとは思うけど。

察するにJavascriptの話だろ、693は。
704デフォルトの名無しさん:2008/02/05(火) 06:45:31
よく読めよ・・696はざっくりプロトの方なわけだが
705デフォルトの名無しさん:2008/02/05(火) 06:52:42
おっさんごめん
706デフォルトの名無しさん:2008/02/05(火) 07:01:58
だてに禿げてねーんだぞ
707デフォルトの名無しさん:2008/02/05(火) 09:39:31
>>696のプロトの話は>>693のプロトの話と関係ないよね。

>>700のおっさんの言ってることは分かるなあ。
昔はよくC++と俺ライブラリで何でもやってた。
最近はC#と.NETで事足りてるから俺ライブラリ使わないけど、
.NET禁止環境に配布するときだけは引っ張りだすこともある。
708デフォルトの名無しさん:2008/02/09(土) 19:55:14
そういう高機能な俺ライブラリにかわるようなもので
一般的な奴ってあるの?
709デフォルトの名無しさん:2008/02/09(土) 20:44:19
ATL/WTL
MFC
710デフォルトの名無しさん:2008/02/09(土) 20:51:37
gladeはどう?
mm版もあるようだが、わざわざmm版使うくらいならqtでいいような気もするけどw
711デフォルトの名無しさん:2008/02/09(土) 21:45:51
そういやトロールテックどっかに買収されたな。
712デフォルトの名無しさん:2008/02/09(土) 22:22:13
qtっていくらすんの?
713デフォルトの名無しさん:2008/02/10(日) 09:30:18
[KDE/Qt]Qtについての疑問を教えあうスレ 3
http://pc11.2ch.net/test/read.cgi/tech/1194158506/
714デフォルトの名無しさん:2008/02/13(水) 01:03:27
>676
>>正直言って、weak_ptrだけで十分
shared_ptr使わないでweak_ptrだけ使うって・・・
boostのそれを指しているのならば意味が分からん。

誰か解説ヨロ。
715デフォルトの名無しさん:2008/02/13(水) 02:22:39
shared_ptrなんてバグの温床だから使うなよ。


shared_ptrは悪くないだ、俺が悪いんだ、、、
716デフォルトの名無しさん:2008/02/13(水) 11:04:51
>>714
weak_ptrに汎用的な機能を持たせるって意味だろ
717デフォルトの名無しさん:2008/02/13(水) 11:29:39
代入しようとすると deep copy してくれる scoped_ptr ってないの?
自分で作ったの使ってるけど,標準的なのがあれば
そっち使おうと思って.
718デフォルトの名無しさん:2008/02/13(水) 11:38:59
optionalでどうよ
719デフォルトの名無しさん:2008/02/13(水) 11:44:34
>>1
良くネーよ、複雑になりすぎてまともに使える人間が居ない
挙句、オブジェクト指向がわかって無いからできないとか抜かすアホまで現れ始める始末だし。
そんな使い方したらC++はJava以下じゃねーかとか思いながら、そんなタコが現れるのも無理も無いと思うので
C#なりJavaなりにとっとと移行すべきだと思うのである。

>>717
どうやって作ったの?
代入演算子がアレなC++では無理があると思って諦めていた、ちょっと教えてくれ
720デフォルトの名無しさん:2008/02/13(水) 11:53:10
>>676
組み合わせて使う事を前提にした weak_ptr のみで一体何をしようというのだ、使い道つーか使い方ワカンネーよ
設定すら出来ないポインタに存在価値はあるのかwww
721デフォルトの名無しさん:2008/02/13(水) 15:20:28
だから全部weak_ptrにして汎用的にするんだろ
722デフォルトの名無しさん:2008/02/13(水) 15:40:27
>>721
悪い事は言わないからもっともっと使いこなしてみろ、使い方次第ではガベコレ方式より遥かに強力な shared_ptr/weak_ptr だ
その能力は、単なる生存管理にとどまらないという事を知るべきだ。
お前みたいなタコが増えてくるから、もうJavaでいいよなんて事になるんだよ。
723デフォルトの名無しさん:2008/02/13(水) 17:38:31
RAD使わなきゃdelphiが一番難しいんだろ?
724デフォルトの名無しさん:2008/02/13(水) 18:02:22
DelphiからRADを取っちゃったら何も残らないじゃないか
725デフォルトの名無しさん:2008/02/13(水) 18:03:29
pascalコンパイラとしては使えるだろう。
726デフォルトの名無しさん:2008/02/14(木) 00:02:19
>721
>>だから全部weak_ptrにして汎用的にするんだろ
意味がわからん。
weak_ptrはshared_ptrと対になって、尚且つ使い分ける事に
意味があるのに。もっと馬鹿にも分かるように説明してくれ。
727デフォルトの名無しさん:2008/02/14(木) 00:13:42
>>726
基本的にインスタンスは全部自動変数で、参照はweak_ptrで渡せば、
スコープで寿命が来ても参照が残らない。
728デフォルトの名無しさん:2008/02/14(木) 00:14:59
>>721じゃないけど、shared_ptrも何もかも、ポインタが全て
weak_ptrに統一されて、Javaが実装している参照のような
弱い参照を用いた実装になるってことじゃないかな
729デフォルトの名無しさん:2008/02/14(木) 00:28:31
Javaの参照だって4種類もあるよ。
730デフォルトの名無しさん:2008/02/14(木) 00:29:51
>>717
特定のクラスのサブクラスしか格納できないboost::anyみたいなもの?
需要あると思うけど、ネーミングをするのが一番難しいと思う。
名前さえ決まれば、boostに追加されそうな気がしないでもない。

>>719
代入演算子じゃなくて、テンプレートコンストラクタでどうにか汁。
731デフォルトの名無しさん:2008/02/14(木) 00:50:41
>727
「汎用的にする」の一例という解釈でOK?
「全部weak_ptrにして」のほうも解説よろ。
特に「全部」が何をさしているのか。

>728
Javaの弱参照は通常参照と区別して使用することに意義があるんじゃないの?
それが正しければshared_ptrと使い分けできない(統一された)weak_ptrに存在意義は
ないとおもわれ。
732デフォルトの名無しさん:2008/02/14(木) 00:58:48
なんか電波がピピっときて理解できた気がする。
C++の生ポインタが全部weak_ptrになっちゃって、あるweak_ptrをdeleteしたり、
参照してた自動変数がスコープアウトで消え去ったりした場合、
同じオブジェクトを参照してるweak_ptrがみんな0になるとちょい便利かも
みたいなはなしじゃないのかひょっとすると。
733デフォルトの名無しさん:2008/02/14(木) 01:01:53
>>732
正解
電波のスキルがうpしたねw
734デフォルトの名無しさん:2008/02/14(木) 01:27:42
>>732
どんだけランタイム情報が充実してんだよwww
735デフォルトの名無しさん:2008/02/14(木) 01:46:35
自動変数がスコープアウトで消え去ったのを weak_ptr で捕捉するのは
そのままでは無理では?捕捉される側のオブジェクトのデストラクタなりで
何らかの notification を行わないと
736デフォルトの名無しさん:2008/02/14(木) 02:16:14
>>735
そうだね。
被参照オブジェクトの側でweak_ptrのリストを持っていて、
デストラクタでweak_ptrに通知するしかないね。
737デフォルトの名無しさん:2008/02/14(木) 02:34:00
だったら言語仕様かえて、型なんてなくしちゃえよ
738デフォルトの名無しさん:2008/02/14(木) 02:40:18
>>737
ぶっちゃけ俺言語にでも走った方が楽しいかなと思うときもある。
でもそういうのは仕事で使えないからなー。
739デフォルトの名無しさん:2008/02/14(木) 09:43:48
weak_ptrとかshare_ptrとか見ると
namespace pointer
{
 class werk;
 class share;
}
の様にアンダースコアで区切られ微妙な名前になるより、
長くても名前空間で区切られる方が有り難いと思うのは、俺だけ?
740デフォルトの名無しさん:2008/02/14(木) 09:56:46
>>739
uint8_tとかwchar_tとかと同じ類
741デフォルトの名無しさん:2008/02/14(木) 10:05:56
>>740
クラスと単純な型では違う気ガス。
基本的な型は、どこのスコープからでも見えた方がよいからね。
742デフォルトの名無しさん:2008/02/14(木) 11:08:35
>>741
作った人は、そういう基本的な型と同じカテゴリーだと考えていたのだろう。
好みの問題だから、どちらが正しいという論争に答えはないよ。
743デフォルトの名無しさん:2008/02/14(木) 11:34:24
全部 shared_ptr で循環参照に対して対策を施すというのならまだ話がわかるが、全部weak_ptrって、、訳わからんな。
脳みそばらして中身覗かせてくれよ
744デフォルトの名無しさん:2008/02/14(木) 13:00:09
どっちも同じに見えるのは気のせいか
違いを解説してくれ
745デフォルトの名無しさん:2008/02/14(木) 14:15:23
>>744
理解しているとはとても信じられないが、仮に理解しているとして、だ
まず、weakとsharedの意味を辞書で引いてどちらがふさわしいか考えてみろと
746デフォルトの名無しさん:2008/02/14(木) 14:39:19
>>745
ただのポインタ(char*など) + weak_ptrで循環参照が解決すると思ってたんだ
俺が間違ってたのか?
747デフォルトの名無しさん:2008/02/14(木) 14:46:54
>>746
少なくともboostのweak_ptrは、boost::shared_ptrに格納されているものにしか機能しない。
748デフォルトの名無しさん:2008/02/14(木) 16:34:45
コピーは自由にできるが一つでも消えたら全部道連れということかね。
それって便利か?
749デフォルトの名無しさん:2008/02/14(木) 16:50:47
auto_ptr以下だなw
750デフォルトの名無しさん:2008/02/14(木) 19:43:10
単にdeleteしたりスコープから外れたりして、
使えなくなったオブジェクトを扱おうとすることを弾けるというだけだな。
デバッグ時には無条件に便利かも。
751デフォルトの名無しさん:2008/02/14(木) 20:17:51
コンテナにauto_ptrすら入れられない
ライブラリが標準名乗ってるのがそもそもの間違い。
752デフォルトの名無しさん:2008/02/14(木) 20:25:57
確かに、なんでshared_ptrが最初から入らなかったのか不思議。
753デフォルトの名無しさん:2008/02/14(木) 20:46:22
>>752
templateに対する理解が進んだのはSTLがでてからそこそこ経った後だから仕方なかろう。
ATLの時代ですら、不十分な理解のまま巨大ライブラリを作って、あの有様だし。
754デフォルトの名無しさん:2008/02/14(木) 20:52:38
コンパイラ製作者であるハゲの人の意図すら超える内容があった template は今後も重要な概念になると思いますよ。
破滅的になってきたC++が維持できるかどうかは別として
755デフォルトの名無しさん:2008/02/14(木) 21:19:51
>>753
そう言われると、あの時代にSTLが作られたということが奇跡的に思えてくる。
アロケータとかアレなところはあるけど。
756デフォルトの名無しさん:2008/02/14(木) 21:44:58
書籍で読んだ限りではSTLは作られたんじゃなくて別の言語から移植された物なんだよ、どこかに歴史がかかれていないかな?
元々はオブジェクト指向ベースのクラスライブラリになる予定だった。
さらにSTLで納得できない人たちが集まって作ったのが boost
templateの驚愕の事実はLokiライブラリの作成と、そこでのメーリングリストのやり取りより始まる。
それにしても不思議、不思議だな、僅かな規則を決めたら、そこから知らない事実が次々とでてくるというのは。
言語やライブラリというものは、人間の作ったものだけけど、
このテンプレートと来たら、まるで元々そこにあって、自分たちはそれを掘り出しているような気分になる。
彫刻家が仏像を彫るときに、仏像は木の中にいる、自分はそれを掘り出しているだけだという
なんとなくその気持ちがわかる。
757デフォルトの名無しさん:2008/02/14(木) 22:17:06
>>756
STLはAdaから移植された物らしいね。
それはあまりに巨大な物だったのでC++の言語仕様に取り入れる
時にバッサリコンパクト化した。
758デフォルトの名無しさん:2008/02/15(金) 17:05:26
wikipedia見たけど、メタプログラミングやりたかった奴が実現できる環境がAdaしかなかったのでそっちで初めたけどC++に鞍替えしたという感じじゃん。
どっちも同一人物が作ってるし。
759デフォルトの名無しさん:2008/02/15(金) 19:55:30
Cという言語があったその昔、std::vectorみたいに育つ配列作ったら、上司に思いっきり笑われたのを今でも思い出す。
760デフォルトの名無しさん:2008/02/15(金) 20:18:56
761デフォルトの名無しさん:2008/02/15(金) 23:38:48
Cにvectorはいらない。
762デフォルトの名無しさん:2008/02/16(土) 03:12:49
仕事で人のCのコードを見ると必ず自前のvectorが使われている。
一度メモリリークしているものも見たことがある。
指摘したら客からクレームはないとスルーされた。
763デフォルトの名無しさん:2008/02/22(金) 16:28:21
そこで始まる前から終わってしまったC99の出番ですよ
764デフォルトの名無しさん:2008/02/22(金) 17:36:32
C99によりC++とCの互換性が無くなってしまった。
そりゃ終わるだろ。
765デフォルトの名無しさん:2008/02/24(日) 22:54:18
レベル1: 育つ配列として使える構造体(vector)を作る
レベル2: vectorをポインタで受け渡しする
レベル3: vectorに関数ポインタを持たせる
レベル4: 確保したメモリ領域を管理し、使用量をデバッグできるようにする
レベル5: 安全に、全ての確保メモリを解放できる
レベル6: 様々なアルゴリズムに特化したvectorを作る
レベル7: あれ? もしかしてコレC++使えばよくね? と思い始める
766デフォルトの名無しさん:2008/02/25(月) 01:10:33
>>764
C++0xでまた互換性がある程度は復活するんじゃね?
767デフォルトの名無しさん:2008/02/25(月) 02:07:16
最初からC勉強しても結構無駄骨折るよな?
768デフォルトの名無しさん:2008/02/25(月) 08:23:49
ツェーペーペー
769デフォルトの名無しさん:2008/02/26(火) 10:22:11
自分は今仕事ではC#とかJavaです。C++はお勉強は少しだけしたことがありますが、
自力でアプリ組むのはできないと思います。

自分のようなC++素人から感じるのは、

-----------------
・危険度が高い

ハードに近い部分にアクセス可能なので、とんでもない惨事をもたらすコードが書けてしまう。

・規則に例外が多い

こうも書ける、ああも書ける。そしてこう書くと実はこういう動きをする。〜には実はこんな意味がある
とか規則がスッキリしていない。

シンプルな基本ルールから演繹してソースコードを書くというよりも、上記のような事例を沢山記憶して
いないとアプリが作れない。
-----------------

ってことなんですが、実際どうなんでしょうか。C#やJavaは上の2つについては不十分かも知れませんが
前進していると思います。一定のパフォーマンスや自由度が犠牲にしてますが。
770デフォルトの名無しさん:2008/02/26(火) 12:31:53
>>769
規則に例外が多いとは感じたことないな。vector<bool>くらいか
実装に依存する差異はJavaやC#に比べて多いとおもう
771デフォルトの名無しさん:2008/02/26(火) 12:43:35
危険度もまともなOSで動かす分には変わらない。
変なことをしようとするとOSに止められる。
それはC#やJavaだとVMが担っている役割だな。

もちろんやろうと思えば危ないこともできるけど、
それはプログラマが意図的にそういうプログラムを書かないとやれるわけがない。
ウィルスとかワームとかがそう。

規則に例外が多いってのは、どの言語でもそうだと思う。
JavaやC#だとEqualsと==演算子とか最初何あれって思ったよ。
慣れればなんてことないんだけど。
772769:2008/02/26(火) 13:28:42
なるほど、C++知らない人間が想像で怖がってるだけなのかも知れませんね。

どうも自分は、統一感があるのがC#やJavaで、C++ってのは今までの経緯というか
文脈というか、言語の細かい「事情」に通じてないと使えないという印象を持ってました。

あとメモリ管理を意識するというのも大変そうだなぁと。ソースコードが何をやって
いるのか、ではなくて、マシンのメモリ上のどの部分をいじってるのか、ということを
意識するというのは、実際に工数が膨らんでしまう&大きな不具合が生じる可能性が
高まるんじゃないか、と思うのです。
773デフォルトの名無しさん:2008/02/26(火) 13:41:53
メモリ管理を意識ってのはほとんど寿命の問題。
普通にやってるぶんにはマシン上のメモリ配置など意識する必要はない。
触りもせず杞憂もほどほどにしとけ。
774デフォルトの名無しさん:2008/02/26(火) 13:56:29
スマートポインタ使っとけ
775デフォルトの名無しさん:2008/02/26(火) 13:56:40
C++使いの私からすれば、一々newしないといけないJavaの方が面倒だと思う。
データ構造はSTLのコンテナを使えば済むし、オブジェクトは普通にローカル変数で済むからね。
776デフォルトの名無しさん:2008/02/26(火) 14:22:13
>>775
Javaでもローカル変数ぐらいはあるが、
C#でいうところの値型(struct)がないのが面倒ってこと?
777デフォルトの名無しさん:2008/02/26(火) 15:10:36
GCのほうか余計に気を使う。
778デフォルトの名無しさん:2008/02/26(火) 15:24:06
自分も>>769と同意見で、C++は注意することが多すぎると思う。
メモリ管理、スライシング、仮想関数テーブル、多重継承、Cスタイルとの混同、ヘッダの衝突etc...
STLも、さらにBoostも覚えて使えとか、うちではMFC使ってますとか、
組み合わせて使うときにはまた注意事項が増えて・・・。
Javaや.NETではほとんど意識しないことばかりだから、ストレスが溜まるよ。
779デフォルトの名無しさん:2008/02/26(火) 15:49:07
そうかのう。
必要に応じて取捨選択すればいいだけ。
むしろ、俺はJAVAでGUIどうやって書けば良いのかわかんね。
EclipseにGUIエディタとか入れてるはずなのに出てこねーし。
まあ、作れてもJudeみたいに糞遅いプログラムじゃ悲しいけどね。
780769:2008/02/26(火) 16:28:57
自分の基本的なプログラムに対する考えは、「富豪プログラミング」的なものです。

つまり、分かりやすい、間違えにくいというのが最優先であって、実行効率やそのための
裏技的な知識は2次的なもの、という考えですね。

富豪的でも「難解」なコードはあり得るでしょう。アルゴリズムのようなものです。しかし、
C++が難解なのはそういう意味ではなくて、>>778に書いていただいたような、文脈を
色々知らないとコードが書けないってことなのです。

>>779
ちょっとお聞きしたいのですが、C++っていうと、WinのGUIアプリっていうつながりが
やはり定番なんでしょうか?逆にそれ以外の用途って、どんなものがありますでしょうか。
781デフォルトの名無しさん:2008/02/26(火) 16:34:23
C++の言語の仕様が詰め込み杉ってのを否定する奴はまずいないだろうね
782デフォルトの名無しさん:2008/02/26(火) 16:56:47
>>780
普通にシミュレーション系のプログラムを書く分にはGUIなんて要らないし、
C++でも>780の言うところの富豪プログラミングができると思うけどねぇ。
783デフォルトの名無しさん:2008/02/26(火) 16:57:02
ライブラリの仕様が延々書いてあるから多く見えるだけのような…
個人的にはいらない機能もあるけどね
784デフォルトの名無しさん:2008/02/26(火) 17:09:30
Windowsに関していえば、
GUIなどは.NET、速度を要求するところだけC++のハイブリッドが望ましい。
部分的にアセンブラを使うような感覚で。
785デフォルトの名無しさん:2008/02/26(火) 17:43:03
文化なのか何なのか知らんが、Windows プログラマが C++ を使うような場面で
Unix や Linux のプログラマは C (含 gcc 拡張) を使うケースが多いよね。

>>780のように言語自体が難しいのはアレだろという意見は昔からあるわけで、
C が使える環境でも Fortran だの COBOL だのを好んで使う人も昔からいた。
perl で短く書けるものを sh や awk で長く書く人とかも同類か。
786デフォルトの名無しさん:2008/02/26(火) 17:56:51
>>785
短く書けるからと言って、awkで読み易く書けるものをperlでわざわざ読み難く書くこともなかろう。
787デフォルトの名無しさん:2008/02/26(火) 18:00:37
awkは知ってるが、perlは知らん。
awkで不足するようならC++に飛んじゃう。
788779:2008/02/26(火) 18:02:21
>>780
いんや、GUIなんて殆ど作りません。
JAVAやC#は覚えることが少いとか言う人がいるんで、
C++でやってきた人間にはJAVAも覚えることだらけだよと言いたかっただけです。
789デフォルトの名無しさん:2008/02/26(火) 19:00:35
Cで多態とかやろうとするよりはC++でやったほうがシンプルに書けるとかもあるんで
Cだから簡単だとは一概には言えないよ
それと、全部やるなら覚えることが多いのは確かだけど
使わないでいいならクラスもテンプレートも覚える必要ないし
790デフォルトの名無しさん:2008/02/26(火) 19:18:23
慣れた言語が一番使いやすいから、ある用途で優れてる言語と分かっていても、
自分にとっては慣れてないせいで結構細かい言語仕様、ライブラリを調べないと
何も書けないというのもある。
791デフォルトの名無しさん:2008/02/26(火) 20:32:05
C++が目指した道も「分かりやすい、間違えにくい」ということだったはずなんだけど、
結果は、そこに至るまでの道がかなり長い方になってしまった、と自分は思っている。
792デフォルトの名無しさん:2008/02/26(火) 20:32:49
C++だってわざと難しくなるようにできているわけじゃなし、少なくともプログラム言語ひとつ捕まえて、複雑だの何だの言って怖がってるうちは一山いくらのアルバイト程度のプログラマであることを自覚した方がいい。
793デフォルトの名無しさん:2008/02/26(火) 20:48:04
Java の人には、きっとプログラマじゃない人(実装することの専門家を目指してない人)も結構いるんじゃない?
794デフォルトの名無しさん:2008/02/26(火) 20:55:28
C++は全用途向け言語ってことを忘れてる奴が多すぎる
安全性を理由にプログラマが実行可能なことを減らしてはならない
邪悪なハッキングだって時には必要な事だから禁止されてはいないのだ
795デフォルトの名無しさん:2008/02/26(火) 21:08:19
JavaやC#よりも面倒なのは俺も思う。
それに、IDEの補完機能の賢さやコンパイルの速さでは本当にC#やJavaが羨ましい。
796デフォルトの名無しさん:2008/02/26(火) 21:32:11
C++は標準の例外がクソ過ぎる。

と俺は思っています。
797デフォルトの名無しさん:2008/02/26(火) 21:39:45
標準ライブラリ全般がくそで貧弱です。
TR1では到底足りません。Boost全部入れたって足りるようなものではありません。
798769:2008/02/26(火) 22:20:42
>>788
そうですか。現状のC++の用途というとWinGUIアプリが中心なのかな、と思ってました。

あと、C++ができる人にとって、JavaやC#は楽勝であるというのは事実でしょ?自由度が
Java/C#よりも大きいのですから。

>>792
問題は、C++が知識量を必要とするということなんですね。ちょっと極端な例かも知れませんが、
Schemeのように実に単純な文法から森羅万象を生成するというのではなく、覚えておくべき
知識を要求してくるのがC++じゃあないかと。

JavaやC#はその辺Scheme程ではないですが、シンプルです。変数の扱い、スコープ、基本的な
構文、クラス関連の表記方法と意味が分かればよい。あとは、いかに無駄無く綺麗に書けるかに
なってくるわけで、これは知識とはちょっと違います。
799デフォルトの名無しさん:2008/02/26(火) 22:40:01
>>798
というか君は、CもC++もロクに使ったことが無いんだろう。
ちょっと触れたぐらいで多くを語るなw
800デフォルトの名無しさん:2008/02/26(火) 22:40:02
Schemeとまではいかないまでも、LLから勉強してある程度
プログラミング覚えてからCやC++やったほうがいいと思うんだけど…
801デフォルトの名無しさん:2008/02/26(火) 23:35:06
C++→C#と入ったが、楽勝ではなかったぞ。
あの大量のライブラリ、初めは適切なキーワードもわからずググれない。
それ以外の言語を始めるのと大してハードルは変わらなかったと思う。

一通り使えるようになった今だから言えることだけど。

楽勝だなんてC#にもC++にも失礼だ。

802デフォルトの名無しさん:2008/02/26(火) 23:57:17
ライブラリの学習コストはどの言語でも大変。
.netはそれを統一してくれた。
803デフォルトの名無しさん:2008/02/27(水) 00:00:05
一人でプログラム作るんならC++を使うけど、
数人でプログラム作るんならCやJavaを使う。
804デフォルトの名無しさん:2008/02/27(水) 01:35:56
>>798
Java は Java で標準添付のクラスの量に初心者はびっくりするよ。
どれをどう組み合わせて使えば良いのか判らない。
そういう意味では情報量は必要だよ。
805デフォルトの名無しさん:2008/02/27(水) 05:26:41
>>797
そうか、きみの使っている言語は準標準レベルで
マルチスレッドと構文解析機とシリアライズと非同期通信とグラフ理論と行列計算
をサポートしているというのか。それはすごい。
806デフォルトの名無しさん:2008/02/27(水) 06:07:35
キレのある皮肉のつもりなんだろうな〜、きっと。
807デフォルトの名無しさん:2008/02/27(水) 07:29:41
つーか、matlabがかなり近い?
808デフォルトの名無しさん:2008/02/27(水) 09:27:46
一度C#をやろうとしたとき、ヘルプを見ても欲しい情報がなかなか見つからなかったのがつらかったな
C++は十年以上かけて覚えたけど、どんどん仕様が変わっていったのがつらかった
809769:2008/02/27(水) 10:38:58
>>799
> ちょっと触れたぐらいで多くを語るなw

あはは。いや、お勉強ならしたことあるんですがが、C++の実際の実装ではそんなのあまり
役に立たないと感じたわけです。結局、低レベルの、OSだったりメモリ管理だったり
の知識が必要となるんじゃないですか。

>>802>>804>>808

ライブラリの学習って言いますが、あれは覚えるものではなくて辞書の引き方を知るだけで
よいのです。大きな本屋へ行って、目当ての本を探す際に書店の分類を参考にしてその書棚へ
向かうのと同じですよ。検索エンジン使うのとも似てます。

810デフォルトの名無しさん:2008/02/27(水) 10:49:24
>>809
> 結局、低レベルの、OSだったりメモリ管理だったり
> の知識が必要となるんじゃないですか。

なる場面もあるしならない場面もある。
デバドラ書くならOSの知識は必要だけど単純なファイル操作だけとかならほとんどいらない。
スクラッチでメモリ管理を書く必要があるなら知識は必要だけど、
アプリで使う程度のメモリ管理ならコンテナとスマートポインタで簡単にできる。
C++は両方の局面で使えるってことだね。
811デフォルトの名無しさん:2008/02/27(水) 10:52:11
>>809
>結局、低レベルの、OSだったりメモリ管理だったり
Win32APIとかそのへんの話か?
そこらへんだったら言語の問題とはベクトルが違うぞ。
言語と環境を一緒くたにするな。
812デフォルトの名無しさん:2008/02/27(水) 11:11:32
でもC++のコンテナとかでトラブルが起きると
デバッガでマシン語眺めないと原因がわからないことが多いような。
.NETとかだと〜Exceptionの意味を調べれば終わりだけど。
813デフォルトの名無しさん:2008/02/27(水) 11:36:38
なんでやねん
814デフォルトの名無しさん:2008/02/27(水) 14:29:23
>>809
その辺りは考え方の違いで、
・C/C++ はメジャーなので多くのプラットフォームがネイティブでC/C++から呼べるAPIを
 用意している。のでC/C++で何か書く場合には、それを使えるし使うことが多い。
・Java は OS 側からのサポートが超貧弱。代わりにライブラリを用意。
 それで出来ないことについてはJNI 等に頼らざるを得ない。
という見方もできる。

いずれにせよ、ライブラリの問題なら言語仕様とは関係ないし、ライブラリを除外して考えるなら、
Java で簡単にできることはそのほとんどが C++ でも同様に簡単(かつ難解でなく)できると思う。
815デフォルトの名無しさん:2008/02/27(水) 16:59:59
>>809
趣味なら構わんが仕事なら役立たずPGの烙印押されるよ。
よくC++10年使ってましたというPGがMFCやATLが理解できなくて
テスターにしか使えないとかよくある。あるいは、
1時間でできるコーディングを調べながらやって1週間かけるPGとかいる。
コーディングスピードはできる人とできない人で100倍以上の差があるなんてのはよくある。
816デフォルトの名無しさん:2008/02/27(水) 17:50:36
tteいうか、JavaでもC#でもちょちょっと調べてさらっと書ける人なら
Symbian だろうが Win32 だろうが C++ でコード書くくらい楽勝だよなぁ・・・
DI等のマイナーなくせにお約束だらけの世界も少ないし。

生産性において MATLAB と比べられたらさすがに分が悪いけど。
817デフォルトの名無しさん:2008/02/27(水) 18:47:52
std::vector<std::auto_ptr<hoge>> kusolib;
818デフォルトの名無しさん:2008/02/27(水) 18:51:22
>>814
JavaにOS側のサポートが多かったら、Javaの理念に合わないんじゃないのか?

>>815
C++を10年使っている事と、MFCやATLが判らない事は何の関係も無いと思うんだ
819デフォルトの名無しさん:2008/02/27(水) 20:08:55
815の言う「MFCやATLが理解できない」というのは、
いま現在知っているかどうかだけでなく、「今は知らないが必要ならすぐ使えるようになるレベル」
も含めた、広い枠組みでの有能・無能の話だと思うよ。
820デフォルトの名無しさん:2008/02/27(水) 21:23:03
ATLはCOMが手軽に扱えて便利だったがMFCの存在価値はまったく理解できない
821デフォルトの名無しさん:2008/02/27(水) 21:47:37
ただ、MFCを作ったプログラムという資産は山ほどあるわけで。
822デフォルトの名無しさん:2008/02/27(水) 23:01:11
MFCよりWTLがいい
823デフォルトの名無しさん:2008/02/27(水) 23:29:13
オブジェクト指向言語でライブラリを理解するということは
フレームワークのお作法を理解するということで、理解するにはやはり時間がかかる。
特にMFCみたいにマクロだらけのものは。まぁ便利だけど。
824デフォルトの名無しさん:2008/02/28(木) 01:17:53
>>816
Javaは基本的に公式ドキュメントあれば事足りるから
調べ物にはあんまり困らないよ。
突っ込んだ仕様は調べる必要あるけど。

C++は何故か必要な情報になかなかたどり着けねえ…。
825デフォルトの名無しさん:2008/02/28(木) 09:28:24
Javaは学習しやすいけどランタイムの信頼性が低いのがネック
826デフォルトの名無しさん:2008/02/28(木) 10:51:34
>>824
どういう情報にたどりつけないのだ?
C++の仕様として読み込まれていることならC++の仕様を見るだけでわかるだろ。
MFCだったらC++の仕様じゃないんだから、MFCの仕様を探せば良いわけでな。
本来、OSや環境サイドで決めるものの仕様まで言語仕様に読みこんでるものはすかん。
827デフォルトの名無しさん:2008/02/28(木) 12:48:39
>>824
>Javaは基本的に公式ドキュメントあれば事足りるから

いくらなんでもこれはないだろう。
トイ・プログラム程度しか書いたことないんじゃ・・・
828デフォルトの名無しさん:2008/02/28(木) 16:09:00
基本的だから別にいいんじゃね?仕事的にはアウトだけど。
どんな言語やライブラリ、処理系だってバグがないものなんてないから、嵌るときは嵌る。
829デフォルトの名無しさん:2008/02/28(木) 20:26:10
僕は神になる為に駅前ギャンブル場に行った
そしてトイレにこもり続け、 店員に注意された----

僕「店長を呼んでくれないか」
賭博主が何事かと、のこのこやってきた

僕はロープ、ベルトをもっている

僕「お前のせいで借金地獄だ 自殺しようと思う
暴力団に殺されるより楽にしにたい」
賭博主「え!? そんなことしたら、営業妨害で訴えますよ?」
僕「それがどうした これから死のうってのに
警察呼ぶか? 出てきたら店の真ん中で死ぬ」
賭博主「それは困るッ・・・どうすれば?」
僕「借金は1000・・・万近く・・・あるのだが」

死神「こんな場所が日本に1万以上あるのか うめ〜」

これを繰り返し、僕は神となった!(大富豪になった)
830デフォルトの名無しさん:2008/02/29(金) 00:56:09
C++って好きなんだけど洗練されてないと思うぜ。
かといってJavaはやりすぎだしC#はイっちゃってる。
結局戻る所はC++だわ。

でも洗練されてるC++って見てみたいなぁ。
言語仕様見て感動したい。
831デフォルトの名無しさん:2008/02/29(金) 01:01:06
洗練か…そこんとこDはどうなの?
弄ったことないからD使いの人宣伝してくれ
832デフォルトの名無しさん:2008/03/01(土) 12:32:09
VerilogでASICとか作ってたんですが、今回はSystemCをやると言い出す人がいて
先週からUMLとC++のコード書いてます。
UMLは好きになりましたが、まだあまりC++が好きになれません。
昨日は演算子のオーバーロードを考えた人を絞め殺したくなりました。
こんな俺をC++大好きっ子にするコメントお願いします。
833デフォルトの名無しさん:2008/03/01(土) 12:59:23
>>832
C++として使うから嫌いになるんじゃね。C+便利機能(クラスとか
STLとか)くらいで使えばきっと好きになると思う。
834デフォルトの名無しさん:2008/03/01(土) 13:20:35
SystemCだからといっても、無理やりC++機能をフル活用しようと
思わずに、ベタベタにCでかいてもいいし、クラスとか必要な
とこだけC++の機能使えばいいんじゃないかなぁ。
835デフォルトの名無しさん:2008/03/01(土) 14:56:28
>>832
string jangdonggun = string("あなたのことが") + string("好きだから");
836デフォルトの名無しさん:2008/03/01(土) 16:22:19
>>832
> 昨日は演算子のオーバーロードを考えた人を絞め殺したくなりました。
誰か他の人が書いたトンデモ・オーバーロードに振り回されたのかな。
だとしたら、気持ちはわかるけど、それはその書いた奴が悪いw
まともな奴は心得た使い方をしているし、その範疇の中で語るなら、
演算子オーバーロードが無かったら逆に困るんだよね。色々と。

基本的にC++は、初心者(機能を知らない)を支えたり、身の程知らず(後先考えず機能を使いまくる)を
窘めたり、といった努力を一切放棄した言語。
「上手く扱える奴が得られる幅と力」重視で設計されていて、初心者とか、職場に身の程知らずが居るとか、
そういう人には厳しいと思う。
837デフォルトの名無しさん:2008/03/01(土) 16:33:31
行列計算とかは演算子オーバーロードがないときついな。
838デフォルトの名無しさん:2008/03/01(土) 16:42:58
数学側で演算子がどんどんオーバーロードされるのに、
プログラミング言語側でサポートされないと読みにくいコードになるしな。
839デフォルトの名無しさん:2008/03/01(土) 23:51:36
演算子オーバーロードは何でもありだから、プログラムを書いたやつのセンスが問われるな。
そもそも、演算子オーバーロードの代表格、iostreamの演算子なんて、考えようによってはひどすぐる。
cout << a;
なんて、代入系演算子でもないのにcoutを書き換えちゃうしな。
副作用のある処理は副作用があると明示的にわかる演算子を使うべきのような。
840デフォルトの名無しさん:2008/03/01(土) 23:54:28
C++標準のiostreamなんて、使おうとして一瞬で捨てたぜ!
クソスギデショ。
841デフォルトの名無しさん:2008/03/02(日) 00:02:22
シェルの追記リダイレクトがヒントだったのかね。逆だけど。
842デフォルトの名無しさん:2008/03/02(日) 01:17:52
>>838
数学世界では、破廉恥なオーバーロードがすでにまかり通っていますからね。
843デフォルトの名無しさん:2008/03/02(日) 01:25:02
>>840
STL誕生前のライブラリだけあって、他からひどく浮いてるしな。
844デフォルトの名無しさん:2008/03/02(日) 18:58:48
>>1-843
要するにC最高ってことだな?
845839:2008/03/03(月) 15:04:32
代入が演算子ってのがものすごく気持ち悪くなってきた。
数学的な演算子って言うのはあくまで1つ以上の値や関数等を演算した結果を返すものだよね。
関与したオブジェクトそのものを変更したりはしないはず。
関数f(x)を積分したところで、それは積分した関数を返す演算であって、f(x)自体を変更するものではない。

Cは平気で++や=などの副作用のある演算子が出てくる。
C++に至っては、オーバーロードで+などの一見副作用のない演算子に副作用を込められる。
キショイ。
つーか、演算とはオブジェクトも値も関係無く適用されるべきものであるのに、副作用型演算子はオブジェクトにしか使えないし。
そもそも参照渡しが関数や演算子の定義を見ないと渡したオブジェクトが変更される可能性があるのかどうかわからん時点でキショイな。
こういうことを考えると関数型言語とやらに興味が出てくるのだろうか。
846デフォルトの名無しさん:2008/03/03(月) 15:41:36
演算子を定義できるようにするとかどうよ
さらにホワイトスペースのオーバーロードも出来ます
847デフォルトの名無しさん:2008/03/03(月) 16:15:11
申し訳ないが、>845は「参照渡し」や「演算子オーバーロード」を理解できないで挫折した香具師が、
精一杯虚勢を張っているようにしか見えない。
848デフォルトの名無しさん:2008/03/03(月) 16:16:06
「包丁で人が殺せるから料理ってキショい」とか言われても同意できないよな
殺さなきゃいいんだよ
849デフォルトの名無しさん:2008/03/03(月) 16:20:44
言いたいことはわからなくもないが、今更どうでもいいって感じ。
演算子オーバーロードってC++だけの機能じゃないしな。
Javaはできなかったっけ?
850デフォルトの名無しさん:2008/03/03(月) 16:21:04
> 副作用型演算子はオブジェクトにしか使えない
これは、もしoperator =や[]などがクラスのメンバとしてしか
定義できないということであれば、0xから解消され、
非メンバとして定義できるようになる。
851839:2008/03/03(月) 17:39:41
>>847
すまんが、並列計算数値解析プログラムをCやC++で書いてるのだが。
C/C++の最適化効率の悪さが念頭にあって、副作用のある演算子もその大部分を占めてるなと思ったわけだが。
852デフォルトの名無しさん:2008/03/03(月) 17:43:03
>>851
だからね、その実績が>845で台無しになっているってことよ。
# 尤も、その実績のどこに「参照渡し」や「演算子オーバーロード」が関係しているのか判らないけれど。
853デフォルトの名無しさん:2008/03/03(月) 17:43:47
それは言語の仕様じゃなくてコンパイラの性能だろ
854839:2008/03/03(月) 17:54:09
>>852
まあ、ふと立ち止まって考えたときに、「演算子」というもののありかたがどうなのかと。
Cは「高級」言語じゃないからしかたないが。
>>848のように殺せる道具を殺さないように使えば良いわけだし。
855839:2008/03/03(月) 17:56:34
>>853
コード以上の文脈を読みとるのはコンパイラにとって大変だろ。
同じ振舞いをするコードでも、プログラマの意図したことがわかればより最適化できるケース(エイリアス問題など)があるしね。
856デフォルトの名無しさん:2008/03/03(月) 18:00:23
だからそれはコンパイラの性能だろ。仕様のせいにするなよ。
857839:2008/03/03(月) 18:01:31
>>856
仕様のせいだよ。
エイリアス問題なんてまさに仕様のせい。
858デフォルトの名無しさん:2008/03/03(月) 18:12:33
そう思うならC++以外の言語使えよ
859デフォルトの名無しさん:2008/03/03(月) 18:18:15
要するに参照透明性でしょ。Haskell あたり使えばいいんじゃない?
860デフォルトの名無しさん:2008/03/03(月) 18:22:51
__declspec(noalias)に__attribute__((const))とか
C++標準とは別に、統一を図る場があってもいいとは思う。
861デフォルトの名無しさん:2008/03/03(月) 18:29:29
>>845
君は、きっと関数型言語もきしょいと思うようになるだろうから
演算子の存在しない言語を利用した方が良いと思うんだ
アセンブラでも演算子は出てくるから、ここは一つ、バイナリで直接プログラムを書く人になるんだ
まあ、CPUが変わると命令が変わるが、そんな細かいことは気にするな
きしょい演算子と永遠に縁を切れることを考えたら安い投資だ
862デフォルトの名無しさん:2008/03/03(月) 18:40:57
>>858
C++の仕様に問題があると、なにか問題があるの?
863デフォルトの名無しさん:2008/03/03(月) 18:45:10
>>845
それだと、
関数型言語でも代入はメチャクチャ使いまくるから結局キショいと思うと思うよ。

schemeのset-car!とかset-cdr!とか、call/ccで継続を変数に代入する所とか。
864デフォルトの名無しさん:2008/03/03(月) 19:32:09
>>863
代入が悪いのではなく、代入が演算子になっているのが悪いのでは?
func(a=b)とか出来る所とか。
865デフォルトの名無しさん:2008/03/03(月) 21:49:35
mov a,b って書きたいってことか。
866デフォルトの名無しさん:2008/03/03(月) 21:58:11
:= がほしいとか?違うか
867デフォルトの名無しさん:2008/03/03(月) 23:04:07
Hoge hoge = GetHoge();

の = のところで何が起きるかここだけ見て分からないのはかなり嫌かも。

・GetHoge() が Hoge& を返していた場合
・Hoge に変換できる全く別の型を返していた場合
・Hoge のコンストラクタが受け取る全く別の型を返していた場合
・代入演算子がオーバーロードされていた場合

こうやって見てみると
auto hoge = GetHoge();
は型変換を伴うような変な副作用が無くていいのかな。
868デフォルトの名無しさん:2008/03/03(月) 23:05:37
余計なことを考えず、「= と ++ と -- は特別」って覚えておけばいいのでは。
869デフォルトの名無しさん:2008/03/04(火) 00:06:12
プログラムを書くことを諦めるってのも一つの方法だぜ?
870デフォルトの名無しさん:2008/03/04(火) 01:43:08
>>845
君、Haskell がオイデオイデしてるよ。

>>863
let や再帰を駆使すりゃある程度は…。
871デフォルトの名無しさん:2008/03/04(火) 10:02:10
>>868
そういうレベルじゃなくて、理解した上でのそもそも論でしょ。
872デフォルトの名無しさん:2008/03/04(火) 11:41:00
他人の作った言語なんだから、いつまで使っても馴染まない部分てのは
多かれ少なかれどの言語にもあるかもなぁ。
そんな時、PG的には自分で俺言語を作るべきなんじゃないのかw
873デフォルトの名無しさん:2008/03/04(火) 12:31:37
>>871
そうすると、この話題は「物事に例外が存在するのはキショイ」というだけのもので、
ディテールにはまったく意味が無いと思う。論ですらないよ。
874デフォルトの名無しさん:2008/03/04(火) 12:37:14
>>873
このスレ的にはC++は良いって意見ばっかじゃないという意見が出たらダメということか。
875デフォルトの名無しさん:2008/03/04(火) 12:39:49
演算子オーバーロードの害悪の話が出てきて、
その害悪とは元来の意味とは異なるオーバーロードが可能ということと、
さらには元来副作用をもたらさない演算子に副作用を仕込めるという話になって、
そもそもCの演算子からして副作用を持つ演算子というのは数学的で言う演算子からかけはなれている、
という流れだろ。

おとなしく使えとかそういう話じゃないはずだがw
876デフォルトの名無しさん:2008/03/04(火) 14:10:51
>>874
どういう電波を受信すると、そうなるんだ?
相手が「馬鹿なことを言ってる」ことにしたくてたまらない
二十歳前後の自称論客みたいな話の運び方すんなよなw
877デフォルトの名無しさん:2008/03/04(火) 21:28:53
C++って言語仕様だけが一人歩きしちゃっててかわいい。
878デフォルトの名無しさん:2008/03/04(火) 23:35:10
演算子の一般的な意味とかけ離れた定義が可能なことで、それが糞仕様にはならんと思うよ。
関数名だって自由にデタラメな名前つけれるし。
納品済みのコードでtest1()とかaaaa()とか見たことあるし。
879デフォルトの名無しさん:2008/03/04(火) 23:45:33
演算子は元々言語仕様で意味が決まってるのに、オーバーロードで勝手にそこから踏み出すわけだ。
関数名は元々言語使用で勝手につけてよいと決まっているので、演算子の場合と一緒にすべきではないな。
880デフォルトの名無しさん:2008/03/04(火) 23:46:47
aaaaという関数名はもともとC/C++に存在しない単語だけどoperatorはそうではないという違いはあるけどね。
文字列の連結がoperator-だったり、行列の積がoperator[]だったりしたら発狂しそうだw
881デフォルトの名無しさん:2008/03/04(火) 23:49:13
>>880
やってみれば判るが、実は文字列の連結にoperator-()を使うのは意外に収まりがいい。
寧ろ、Basicを真似てoperator&()なんかにされたら泣ける。
882デフォルトの名無しさん:2008/03/04(火) 23:51:07
>>879
漏れが設計して漏れが実装してるクラスにおける「代入」や「大小関係の比較」の実装は
漏れができるようになってないと使い物にならないじゃん・・・

Java だって equals に「引数をファイルに出力する」とかいう実装を与えられるわけだし。
883デフォルトの名無しさん:2008/03/04(火) 23:52:43
表記の一般的な意味とは異なる実装するから困るって話じゃないの?
Add()関数作って実際は引き算の処理されるのと
文字列の連結がoperator-するのと問題は同じと思うが。
884デフォルトの名無しさん:2008/03/04(火) 23:53:24
VBAをちょこっと触ってる自分はoperator&のほうがまだしっくりくるわ・・・
885デフォルトの名無しさん:2008/03/05(水) 00:35:46
<<よりはまだ&のほうがいいような
886デフォルトの名無しさん:2008/03/05(水) 00:37:39
>>885
それなんてboost::archive
887デフォルトの名無しさん:2008/03/05(水) 00:48:09
MFCもそんなのあったな。
888デフォルトの名無しさん:2008/03/05(水) 14:30:25
>>881
"ABCDBC" - "BC"
この結果は、
"ADBC"だと納得行くが

"ABCDBCBC"なら、「なんでやねん!!!」と思うよ
889デフォルトの名無しさん:2008/03/05(水) 14:39:04
寧ろ、"ABCDBC-BC"になってくれたら何かと便利。
890デフォルトの名無しさん:2008/03/05(水) 15:00:03
便利じゃないよw
891デフォルトの名無しさん:2008/03/05(水) 21:24:42
>>888の状態で16進演算してくるなら便利。でもstringの仕事じゃないよな。
892デフォルトの名無しさん:2008/03/06(木) 13:16:10
>>891
stringの仕事じゃないね
16進演算なんて普通に
int i = 0x0a - 0xf0;
で出来るんじゃね?
893デフォルトの名無しさん:2008/03/06(木) 21:06:05
>>892
ファイルから文字列として読み込んだときとかの話ねw
894デフォルトの名無しさん:2008/03/06(木) 23:01:55
そうだとして"90" - "1" が"8F"とかありえないでそ(w
895デフォルトの名無しさん:2008/03/07(金) 01:03:40
weirdString foo = "-" + "|";
assert(foo == "+");
896デフォルトの名無しさん:2008/03/07(金) 21:29:28
kidsString foo = "1" + "1";
assert(foo == "田");
897デフォルトの名無しさん:2008/03/09(日) 11:25:37
オペレータでどうにかするんじゃなくて
STL的にはイテレータでどうにかすべき問題ではないの?
898デフォルトの名無しさん:2008/03/19(水) 00:51:46
Cだと
int main()
{
printf("%d", 1);
}

c++だと
int main()
{
std::cout << 1;
}

で、最近のコンパイラは使ってない関数は出力ファイルに入らないように削除してくれるらしい。
これをリンク時ガベージコレクションって言うんだっけ?

それで、上記プログラムだとCの場合にprintf全体をリンクする(doubleを文字列化する処理も含まれる)が
c++だとstd::cout::operator << (int)をリンクするだけでOKだ。

後はc++のほうを例外処理無し、RTTI無しのオプションを付けてコンパイルすればCのプログラムより小さくなると思う。

気が向いたら実験してみる。
899デフォルトの名無しさん:2008/03/20(木) 23:40:57
そんなわけなかろうw
900デフォルトの名無しさん:2008/03/20(木) 23:47:57
>>898
ostreamの実装がprintfの実装より小さくなれる気がしないんだが…
とりあえず結果報告キボン
901デフォルトの名無しさん:2008/03/21(金) 06:59:09
>>900
フォーマット文字列の解析が要らないから小さくなるかもなぁ。
902デフォルトの名無しさん:2008/03/21(金) 12:46:04
ヒント:淫乱
903デフォルトの名無しさん:2008/03/21(金) 12:52:17
インリンじゃないの?
904デフォルトの名無しさん:2008/03/21(金) 14:59:25
Cだからってprintfのパーサの実装が綺麗だと思うなよ!
905デフォルトの名無しさん:2008/03/22(土) 00:02:15
>>898
の実験結果を発表します(ジャジャーン)

実験環境
OS:windowsVista
gcc ver3.4.4 @cygwin

cs.cとcs.cppの内容は>>898に#includeを追加したのと同じ内容です。

gcc cs.c
a.exeの大きさは8873byte
gcc -Os cs.c
8683
gcc -O cs.c
8873
gcc -O3 cs.c
8873

g++ cs.cpp
477682
g++ -Os cs.cpp
477014
g++ -O cs.cpp
477577
g++ -O3 cs.cpp
477014

906デフォルトの名無しさん:2008/03/22(土) 00:06:22
>>905
勝負になっていないように見えるが?
907デフォルトの名無しさん:2008/03/22(土) 00:25:25
visual studio2005 sp1のcl.exe

cl cs.c
53,248
cl /Os cs.c
53,248
cl /Ot cs.c
53,248
cl /Ox cs.c
53,248
cl /Ox /Oi /Ob1 /GL /Oy cs.c
53,248

cl cs.cpp
135,168
cl /Os cs.cpp
131,072
cl /Ot cs.cpp
135,168
cl /Ox cs.cpp
131,072
cl /Ox /Oi /Ob1 /GL /Oy cs.cpp
131,072
908デフォルトの名無しさん:2008/03/22(土) 00:31:26
今回の実験ではc言語で書いたプログラムのほうが小さくなった。
でも十分大きなプログラムではこの差はほぼ無視できるレベルになるのではないだろうか。
気が向いたら実験してみる。
909デフォルトの名無しさん:2008/03/22(土) 00:41:22
VCなら/MDを付ければいいんだよ。
910デフォルトの名無しさん:2008/03/22(土) 00:51:21
vc9 /Os /MD
cs.c: 7,168
cs.cpp: 7,680

vc9 /Os /MT
cs.c: 53,248
cs.cpp: 129,024

gcc(4.1.2) -Os
cs.c: 8,330
cs.cpp: 8,827

gcc(4.1.2) -Os -static
cs.c: 615,580
cs.cpp: 1,306,095

-----

サイズの最適化しかやってないけどこんな感じだった
911デフォルトの名無しさん:2008/03/22(土) 10:16:35
ためしにC#版もやってみた、オプティマイズなし
class App {
 static void Main() {
  System.Console.WriteLine( "{0}" , 1 ) ;
 }
}
csc cs.cs : 3,072
ildasm で調べたら Main() のコードサイズは17バイト
コンストラクター 7 バイト、あわせて 24 バイト
その他の容量は、動作しない環境で実行したときのエラーメッセージ用実行コードその他
サイズが気になるなら、マネージド系が圧倒的に有利です
912デフォルトの名無しさん:2008/03/22(土) 11:16:34
ランタイムが別なんだからそりゃそうだ
913デフォルトの名無しさん:2008/03/22(土) 11:48:09
ランタイム別としても17バイトはすごいと思うよ
C だと、スタックフレームの構築だけであっさり17バイト突破するよ
914デフォルトの名無しさん:2008/03/22(土) 19:09:34
ランタイム(VM)に丸投げなだけだろ禿
915デフォルトの名無しさん:2008/03/22(土) 20:58:55
だからその丸投げの度合いがすっげえなって話だろ?
とっくに折り込み済みのことを突っ込みの手段に使うのって馬鹿丸出しだよ。
916デフォルトの名無しさん:2008/03/22(土) 21:06:49
17Byte中に文字列 "{0}" = 8byte も込みだったりするのがまた恐ろしい。
917デフォルトの名無しさん:2008/03/22(土) 21:07:28
>>913
マイクロソフトC++ V14.0でO1で最適化するとCでも14
918デフォルトの名無しさん:2008/03/22(土) 21:13:01
>>913
マイクロソフトC++ V14.00でO1で最適化するとCでもmainのコードサイズは17バイトだ
スタックフレームは必要ない
最適化なしのスタックフレーム付でも22バイトにしかならん
コードサイズだけ比較しても意味ないがね
919デフォルトの名無しさん:2008/03/22(土) 21:15:50
コードサイズを小さくしようという話の流れじゃないのかwww
920デフォルトの名無しさん:2008/03/22(土) 22:10:24
初学者はとりあえずCやっとけ
極めなくてもいいからやってればC++なりJAVAなりいくらでも替えがきく
921デフォルトの名無しさん:2008/03/23(日) 05:42:49
Cは勉強用/拡張用には良いかも知れんが、やりたいことを実現するまでが長いのがなあ。
俺はあんまり勧められない。
922デフォルトの名無しさん:2008/03/23(日) 07:58:35
確かにCじゃ画面に線一本引くのでも苦労するが、
本格的な学習の前の基礎知識を学ぶという点では良いね。

でもCの前にASMをほんのちょっとで良いから勉強してみるのも良いかも。
923デフォルトの名無しさん:2008/03/23(日) 09:19:23
>確かにCじゃ画面に線一本引くのでも苦労するが、

苦労も何もCにそんな機能はない。
924デフォルトの名無しさん:2008/03/23(日) 09:23:16
楽勝
putchar('-');
925デフォルトの名無しさん:2008/03/23(日) 09:24:24
と思ったが標準出力が画面に出力される保証は無いんだった
926デフォルトの名無しさん:2008/03/23(日) 09:25:13
C言語と追加機能を使って線を書くの略だろう
927デフォルトの名無しさん:2008/03/23(日) 09:42:41
追加機能がOKならinclude1つと関数呼び出し一回で線を引ける処理系だってあるし
928デフォルトの名無しさん:2008/03/23(日) 09:57:28
だから逆に言えば簡単に描けない処理系もあるわけで
929デフォルトの名無しさん:2008/03/23(日) 09:59:04
標準ではかけない
930デフォルトの名無しさん:2008/03/23(日) 10:13:34
FreeBSDのSSCLIでも簡単には線を引けないしCに限った話ではないな
931デフォルトの名無しさん:2008/03/23(日) 11:53:03
画面のある任意の処理系に簡単に書ける言語ってあるの?

932デフォルトの名無しさん:2008/03/23(日) 11:57:04
処理系に書く、ってどういう意味だろう。
933デフォルトの名無しさん:2008/03/23(日) 12:00:26
グラフィックが簡単にできる言語があるかという質問では?
934デフォルトの名無しさん:2008/03/23(日) 12:02:20
画面上に線が簡単に書ける言語といえばLOGOだな
935デフォルトの名無しさん:2008/03/23(日) 12:16:09
グラフィックが簡単な言語というならFlash/ActionScriptだな
時点は xaml、ドキュメントとデザイナがもう少しまともになれば間違いなくコレかと。
936デフォルトの名無しさん:2008/03/23(日) 13:53:03
N88
937デフォルトの名無しさん:2008/03/23(日) 13:54:58
旧VBもフォームに一行書くだけで線引けるよ。
938デフォルトの名無しさん:2008/03/23(日) 14:02:49
X1turbo BASIC
939デフォルトの名無しさん:2008/03/23(日) 17:26:50
<hr>
940デフォルトの名無しさん:2008/03/23(日) 19:03:19
>>939 フイタwww
941オガちゃん萌え ◆tyvkWCNtzY :2008/03/23(日) 21:12:17
>>923
ガキの頃、Quick Cを使ってグラフィックライブラリでビデオメモリに線を引いたりしてたんだが、
あの頃はCの標準ライブラリと非標準ライブラリの違いなんぞ知る由もなかった
PC98シリーズでいかに高速な描画をやるかって、インラインでアセンブリを書きまくるとか
アーキテクチャニュートラルなコーディングなんか微塵も考えてなかった
942デフォルトの名無しさん:2008/03/23(日) 21:18:50
その頃にアーキテクチャニュートラルなグラフィックのコーディングを
しようとしたら、なんだろ。X-WindowとかMotifとかかな
943デフォルトの名無しさん:2008/03/23(日) 21:19:32
当時は毎回全コードを捨て去って新規に作っても十分いけるし、コードの品質も毎回向上したからね
実際、非互換の方が高速な上にすばやく作れて、となれば互換性など考える理由は無かったかと。
正しいソフトウェアは時代次第でどんどん変化する訳だ。
944オガちゃん萌え ◆tyvkWCNtzY :2008/03/23(日) 22:15:44
>>943
それだ!
だいたい、当時のPCは性能が今と比較するととんでもなく低かったんだよな
intel系は640KBのメモリとEMSメモリ、ビデオメモリの余りやらを駆使してているソフトなんかがよくあった
互換性よりも動作速度のほうが重要だったのかも
いや、移植先なんてなかったんだ、当時のPC98のシェアは日本国内の90%を越えていたしw

それが今じゃなんだ、ランゲージニュートラルでアーキテクチャニュートラルでUML駆動モデルで
ロバストネス分析→設計モデル。リソースは無限であるという前提ときたもんだ
下回り(デバドラやハード制御)を知らないのも困りもんだが…
945デフォルトの名無しさん:2008/03/24(月) 02:37:58
Javaやってるとクローン作らないで参照戻すくせに
カプセル化がどうの言うの奴とかいるのよ
始めにCとかC++やってればそのへん安心
946デフォルトの名無しさん:2008/03/24(月) 04:07:26
>>945
malloc() の返り値を呼び元でfree() してもらうのは、だめですか..........。
947デフォルトの名無しさん:2008/03/24(月) 09:02:50
>>946
後処理用の関数を用意してあげるのが親切かも
948オガちゃん萌え ◆tyvkWCNtzY :2008/03/24(月) 18:51:57
JAVAやらドトネトとかRuby、Python、Perl、PHPなんかを最初の言語に選んでしまうとC/C++は
ハンパじゃなく分かりづらい言語になりそうだな
949デフォルトの名無しさん:2008/03/24(月) 21:04:20
C/C++を最初の言語に選んでしまった場合は?
950デフォルトの名無しさん:2008/03/24(月) 21:20:31
C/C++を選んだからといって、他の言語の学習が楽になるわけではない。
951オガちゃん萌え ◆tyvkWCNtzY :2008/03/24(月) 23:12:15
>>949
>>950の言うとおりなのだろうかと
だけど、C/C++を最初にやってると、そうでないよりはC/C++学習が楽かも
そんな俺はx86アセンブラ→Turbo Pascal→Quick Cだった
952デフォルトの名無しさん:2008/03/24(月) 23:15:57
学習が楽かどうかは言語仕様よりもIDEのサポートが重要な気がする。

そりゃまあ、昔はmakeとemacsだけでなんでもやってた気がするけどサ。
953デフォルトの名無しさん:2008/03/24(月) 23:33:35
漏れなんか今でも linux や Solaris では vi だなあ・・・
954デフォルトの名無しさん:2008/03/24(月) 23:39:42
>>952
いまでも仕事の大半は、makeとVimで済ませてるな。デバッガもよっぽどの
ことがないと使わない。ファンクショントレースとcoreファイル開いてバックトレース
すればバグの9割以上は1瞬で解決するし。1瞬で解決しない場合は、
2,3のprint文入れればそれで解決する。

システムテストやらででてくる再現性の低い不具合とか、ハード起因の
不具合とかでは、デバッガ重宝するけど。

IDEサポートって本当にそんなに重要か?インテリセンス(笑)なんてVimだって
備えてるぜ?Unitテストなんて、Rubyでは言語のライブラリとして豊富な機能が
提供されてるぜ?VSSよりSVNのほうが便利だぜ?メトリクスツールは、
もはやフリーでも転がってるぜ?

IDEのメリットって何だ?
955デフォルトの名無しさん:2008/03/24(月) 23:49:09
環境の構築が容易
956デフォルトの名無しさん:2008/03/24(月) 23:53:01
>>954
VisualStudioとかのC++BuilderのIDEは使うけど、ほかのIDEはエディタがいまいちなのが多くてmake作成用にしか使わない感じ。
957デフォルトの名無しさん:2008/03/25(火) 00:00:08
>>955
環境の構築の容易さにアドバンテージがあるとしても、IDEを習得するための
労力と時間、一社のIDEに依存してしまうリスク、汎用性の喪失、費用などを
考えると、俺にはIDEの方がいいなんて、現時点では到底思えないな。

Eclipseも数時間で捨てた。VisualEditorだけは使うけど。
VC++使う羽目になりそうだったので、Glade+Rubyで押し切ったわ。
958デフォルトの名無しさん:2008/03/25(火) 00:04:07
まあ、makeでビルド出来る時点で、変人だからねぇ

変人の普通が、普通の人の普通かって話だよなぁ...
959デフォルトの名無しさん:2008/03/25(火) 00:07:15
つーかさ、makeでビルド出来るなら、VC++使っててもいいんでないの?
MFCやATL使わなきゃ環境依存なんて無いでしょ
960デフォルトの名無しさん:2008/03/25(火) 00:11:32
>>959
GUI作ることになった(といっても、社内ツールだが)。VC++使ってくださいと
言われたのだけど、そのツールLinuxでも使うことが想定されたから、
「今後他プラットフォームに移植することを想定するなら、最初からそれを
考慮したほうがいいですよ」といって、Ruby+Gladeで落ち着いた。

横から「Pythonは?Pythonでいきましょうよ!」っていうPython厨がいて
驚いたが、華麗に無視
961デフォルトの名無しさん:2008/03/25(火) 06:41:13
>Python厨
ソイツは大事にしとけw
962デフォルトの名無しさん:2008/03/25(火) 09:17:05
インテリセンス(笑)なんてVimだって備えてるぜ?
963デフォルトの名無しさん:2008/03/25(火) 09:22:37
VCのインテリなら単語補完に毛が生えた程度じゃない?
964デフォルトの名無しさん:2008/03/25(火) 10:09:59
>>960
> 横から
> 華麗に無視
比較的まともであると言われるPython使いの「横から目線」に、
横柄・傲慢で知られるRuby使い特有の「上から目線」で対応したわけですね?

「結果」は現場の力関係に依存するからともかくとして、
Python使いとRuby使いが登場する「人物描写」としては、実にお約束だと思いました。
965デフォルトの名無しさん:2008/03/25(火) 23:46:07
ここでPython対Rubyをやるなよ…。
やるならLLバトルロワイヤルでどうぞ。
966デフォルトの名無しさん:2008/03/25(火) 23:57:43
個人的に軽い社内のツールでVC++とRuby、Pythonなら
Python>VC++>Rubyだなぁ。

特に若い人がPython使いたいって言うなら、自分の趣味は切り捨てて
そっちを優先させるし、特にないならマルチプラットフォームでお手軽(?)なJava
選択するけど。
967デフォルトの名無しさん:2008/03/30(日) 23:05:33
>>963
何を言っとる。
最近のインテリセンスはコーディング中にプリプロセス走らせるぞ。
おかげでビルドターゲットの切り替えが重い重い…。切りたくても
切れないし。
968デフォルトの名無しさん:2008/03/31(月) 01:53:51
>>967
マイクロソフトからすれば、ハードウェアの進化に即した
ソフトウェアを提供しなければ、バージョンアップしてもらえ
なくなるかも、他OSに乗り換えられてしまうかも、という恐怖
が付きまとっているのだから仕方がない。

ソフトはユーザエクスペリエンスを無視して、「重い処理」を
作りこまなければ意味がない。デスクトップアプリ全盛は
それでもよかった。

Web全盛の時代、ユーザは「よりよいエクスペリエンス」が別の
ところにあると気づいてしまったのだな。そして「それで満足」
してしまいそうになっている。

まぁこれからはMSもおもてなしに移行せざるを得ないだろう。
969デフォルトの名無しさん:2008/03/31(月) 01:56:15
そしてIEの改良に注力せずに、他ブラウザの追従を許してしまったことは
致命傷になるかもしれない。シルバーライトを声高に叫んだところで、
さんざんFUDで痛い目を見てきた開発者達はAIRを選択することは
目に見えている。

MS終焉の序章ですな。
970デフォルトの名無しさん:2008/03/31(月) 01:57:43
頼みの綱は、WMPlayerによるDRM動画流通のしくみが豊富なとこくらいか。
はてさてDRM頼みがいつまで持つことやら。
971デフォルトの名無しさん:2008/03/31(月) 03:26:57
>>968
「おもてなし」を使うということは中島さん?
972デフォルトの名無しさん:2008/03/31(月) 08:19:02
つかMSの方針とかどうでもいいし
このスレで許されるMSの話題はVisual C++だけだ
973デフォルトの名無しさん:2008/03/31(月) 08:56:02
vimでも〜とか言ってるやつはC#のインテリ使ったことないだけだろ
974デフォルトの名無しさん:2008/03/31(月) 22:41:51
>>973
C# は確かに凄い。ここまで補完が優秀だと、片手でプログラミング出来る程だな。
仕事で VC++ 使ってると、C# が羨ましくてしょうがない。
「インテリセンスを更新しています・・・」が表示されて、激重な時は特に。

975デフォルトの名無しさん:2008/04/03(木) 08:32:25
>>974
C#楽なんだけどさ、propertyとかいう変なの使ってgetter/setterするのはどうも…
ついでに、インデクサって悪の枢軸じゃなかろうか?
ってか、.NET Frameworkそのものが業務アプリ作るには不十分な希ガス
.NETでGUI作って、処理部はネイティブ言語でAPIコールが生産コスト安そうだ
あとは、俺が古い考えなだけなんだが、ガーベージコレクションの恩恵を受けると、C++に戻った
ときに危うくdeleteするのを忘れそうなんだがw
976デフォルトの名無しさん:2008/04/03(木) 08:47:22
>>975
明示的にdeleteしているならC++を使えていないと言うことだ。
auto_ptrやsmart_ptrを使うか、さもなくばデストラクタでdeleteすればいいのだから。
977デフォルトの名無しさん:2008/04/03(木) 11:05:18
基本に従ってればdeleteは完璧に抹殺できるよな
978デフォルトの名無しさん:2008/04/03(木) 17:03:15
VB6、VB.NETのインテリもまともなんだが
なんでVCだけタコなんだ
979デフォルトの名無しさん:2008/04/03(木) 17:20:05
980デフォルトの名無しさん
ぱくりぱくられだな