[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 08:32 / Filesize : 231 KB / Number-of Response : 986
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 10



1 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:35:36 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
pc12.2ch.net/test/read.cgi/tech/1240022781/

684 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 16:16:08 ]
いやむしろ、char *&p の方がクール。
理由は宣言構文の仕様上、char が specifier で *&p が declarator だから。
char* p; のように書く人は p と q をポインタにしたいとき
char* p, *q; のように非対称に書いたりするので混乱必至。

っていうか宗教^^

685 名前:デフォルトの名無しさん [2009/06/06(土) 16:16:56 ]
それより一引数で参照私の値変更ってのがさ!

686 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 16:23:07 ]
>>684
> char* p; のように書く人は p と q をポインタにしたいとき
> char* p, *q; のように非対称に書いたりするので混乱必至。
そうでもないよ。俺は普段1行目のように書くけど、2行目のようなケースは
まず第一に「滅多に書かない」し、もし書く時は char *p, *q; って書く。

まぁ、宗教。

687 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 16:26:38 ]
そもそも*&ってのが気持ち悪い
ダブルポインタのほうがかっこよくない?

まぁ、宗教。

688 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 16:29:15 ]
Effective C++(第2版)には ** 使うくらいならどうして *& を使わないのかって書いてあるから
*& でいいんじゃない?っていうか、>>681のような質問って時々出てくるけど
その設計にどういうメリットがあるのかしら?
ポインタの管理はクラスの外でやってるし、そもそも内部の詳細を公開しているし・・・

689 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 16:29:33 ]
創価学会最高!

690 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 17:09:37 ]
そこまでするならmulti_arrayみたいにラップするわ

691 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 18:20:00 ]
デバッグしてるときにちょっと気になったんですが
他人の作ったメソッドや関数(例えばSTLやboost)が投げる可能性のある例外を調べる方法は仕様を読む以外ないんでしょうか?
強制的に例外を投げさせるオプションみたいなものがあるんでしょうか?
コンパイラはVC++EE2008を使っています

692 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 18:27:02 ]
つ grep



693 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 22:29:11 ]
複文マクロは
do{〜;〜;〜;}while(0)
とすると良いとききました。
しかしこれだと返り値を持たせられないため、関数形式のマクロが書けません。
複文マクロでありながら、返り値を持たせる方法はありませんか?

694 名前:デフォルトの名無しさん [2009/06/06(土) 22:34:00 ]
インライン使っとけ。 複雑なマクロつかうよりいい。
エラーがわかりやすい。 実行時間が計測できるなどりメリット。

695 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 22:34:51 ]
>>694
インライン関数などの知識は十分あるんですが、
どうしても変なマクロが書きたいんです。

マクロでしかできない変な処理なんです。

696 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 22:46:21 ]
カンマ演算子でなんとかするのはもう考えた?

697 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 22:48:56 ]
>>696
ありがとうございます。

もう考えてあります。
ただ、try catchブロックを盛り込みたく、それがカンマ演算子に合わせられないのです。。。
そしてマクロでしかできない処理というのは「マクロ引数から#で文字列化する」というような
いわばリフレクション的な処理も含んでいる物だからです。

まあ無くても支障ないのですが、一般化して再利用可能にしておいたら便利かなと思って
変態マクロに挑戦しているところです。

698 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 22:50:26 ]
引数っぽくすれば
#define FOO(X) do{;;(X)=hoge;}while(0)

699 名前:697 mailto:sage [2009/06/06(土) 22:55:03 ]
>>698
ありがとうございます。

副作用を持たせるわけですね。
最終手段として考慮します。

しかし当面はもうちょっと挑戦してみます。
返り値はbool型になる予定でして、疑似関数の形の方が分かりやすいので。

関数テンプレートや文字列結合演算子、無名構造体など、
もちえる言語仕様の知識をフル活用してみます。


700 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:20:30 ]
void func(float a[]){
  int size=sizeof(a)/sizeof(float);
}
これでsizeに配列aの個数が入ると思ったのに1になる。何で?

701 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:31:22 ]
aはfloatへのポインタに変わったから

702 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:31:55 ]
サイズが分からないから

void func(float a[10]){
とかにすれば10って出るはず



703 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:34:47 ]
void func(float a[]){
としても

void func(float *a){

となるから

>>702
なんねーよばか

704 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:35:53 ]
ありがとう。float[10]ってしないと駄目なのか
でもそれだとint size=10;ってすることと一緒だから意味無いよね
受け取った配列の数によって処理を変えたいんですがどうすればいいですか?

705 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:38:08 ]
それこそマクロっぽくするべき
#define func(x) func_(sizeof(x)/sizeof(float))
void func_(unsigned size);


706 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:39:11 ]
>>704
二引数にして大きさを渡すする
ものすごい馬鹿みたいに思うかもしれんが
memsetやらfreadやらあるように領域の大きさを渡すのは普通

707 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:39:19 ]
void func(float *a, size_t n) { }
#define numberof(array) (sizeof(array)/sizeof(array[0]))
float foo[10];
func(foo, numberof(foo));

708 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 23:48:33 ]
ありがとうございます。サイズを引数として受け取るしかないんですね
当たり前なんだろうけど、これにはちょっとびっくり。
普通に分かるものだとばかり思ってた

709 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 00:27:30 ]
商業ソフトだとメモリ確保とかでガチガチにtry catchするんでしょうか?

710 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 01:10:01 ]
メモリ確保失敗はアプリレベルではどうにもならないからOSに例外投げてしまう。



という考え方もある。

711 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 01:14:08 ]
限界になる前に、そろそろメモリが足りません言い出すソフトもあるなぁ・・・・

712 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 02:22:58 ]
OSに例外投げたらどうなるんだ?つか、そんなことできるのか?



713 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 02:57:00 ]
他人のソースコードを読んでいってもさっぱり頭に入ってきません。
何かソースコードを読む際のポイントとかあるんでしょうか。

714 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 03:00:11 ]
コメントを読んだり、
読んでる関数の中身までは読まずに、大まかな流れを先に確認する。

715 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 03:37:32 ]
>>713
doxygen(Graphviz)で関係のグラフ化オヌヌメ

716 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 10:54:46 ]
テンプレートの型を一部の型に限定したい(たとえばunsignedの各種整数型のみ)場合は
template<typename T> class HOGE;
template<> class HOGE<unsigned char> {...;};
template<> class HOGE<unsigned short> {...;};
template<> class HOGE<unsigned long> {...;};
template<> class HOGE<unsigned int> {...;};
のように本体を書かずに、特殊化のほうをいちいち全部書くしかないんでしょうか?

717 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 11:53:12 ]
traits

718 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 12:20:01 ]
C++にて。
同じ副作用を保ったまま、式を文にすることは出来ます。
セミコロンを付ければ良いだけです。
 例 x=3ならx=3;とすればよい。
しかし同じ副作用を保ったまま、文を式にすることは出来ますか?
その際の式の値は何だって良いとして。
 例 while(flag){++x;} を ???


719 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 12:50:35 ]
>716
class の中身の方は型によって変わらないと仮定して、

#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_unsigned.hpp>

template<typename T, typename Enable = void>
class HOGE {};

template<typename T>
class HOGE<T, typename boost::enable_if<boost::is_unsigned<T> >::type>
{ // 何か
};

他の型にするなら boost::is_unsigned を適宜変更すれば OK。
型をべた書きするなら↓なんてのも可能。

#include <boost/mpl/set.hpp>
#include <boost/mpl/has_key.hpp>
template<typename T>
class HOGE<T, typename boost::enable_if<
  boost::mpl::has_key<
    boost::mpl::set<
      unsigned int,
      unsigned char
    >,T> >::type>
{ // 何か
};

中身も変わってくるなら >717 の通り traits でまとめる。

720 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 13:42:55 ]
>>718
そこを関数にする。
そうすれば関数呼出式になる。

721 名前:718 mailto:sage [2009/06/07(日) 14:31:24 ]
>>720
あーなるほど。
ありがとうございます。

722 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:39:05 ]
for each 処理を自前で作りたい。
Sentinelを付加する方法でなんかいいアイデアない?



723 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:43:09 ]
CかC++かくらい書け。
もっとも、C++ならSTL使え、だが。

724 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:57:23 ]
もっと洗練されたライブラリが必要だと思うんだ

725 名前:722 mailto:sage [2009/06/07(日) 19:00:27 ]
STL様 i=begin;while((function(i++),i)<=end); は偽物foreach

i=begin; end+1=eoloop; while(function(i++));
      ^^^^^^^^^←この部分

726 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 19:01:00 ]
一応Qt(C++用ライブラリ)にforeachはある
それを参考にしろとは言わんが

727 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:22:20 ]
インターフェースクラスがクールに感じたんだけど、これってなにかマイナス面はある?
今作ってるプログラムをこれ使って大幅に書き換えようかなと思ってるんだけど

728 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:39:06 ]
>>727
ソースコードの量が増える
保守するとき読めればいいが
そんな保証などない

将来性にかけて拡張性に優れた設計にするには
優れた設計能力が必要
後からの変更は1からのやり直し

729 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:48:20 ]
>>727
Qtのこと?
俺もQtの設計は美しいと思ってるし、
いまさらMFCやろうとしてる(まずいないがw)やついたらQtを紹介してる

マイナス面は、以前はGPLだったけどそれも変更になってLGPL
不満といえばdllのサイズぐらいかな?


マルチOSなのもおいしいところ

730 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 21:56:43 ]
>>725
std::for_eachもいやならBOOST_FOREACHはだめ?

731 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:02:31 ]
>>729
そのインターフェイスじゃないだろ

732 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:11:32 ]
QtってGUI専用だと勝手に思っていたが、
GUI以外の事も出来るの?





733 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:18:02 ]
>Qt

何故か俺の中で、
フジコフジオのイメージが払拭できない

734 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:21:55 ]
>>732
コンテナ、ネットワーク、XML、データベースとか一通り
機能制限はあるが組込み向けやXサーバーなしでもGUIが使えたり

735 名前:732 mailto:sage [2009/06/07(日) 22:24:51 ]
>>734
すげーー
マジかよ。

LGPLだと商用利用はしんどいか?
Staticリンクしちゃうとオープンソース強制だっけ?

736 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:55:36 ]
>>735
LGPLだと静的リンクはアウトだね
動的リンクなら商用非公開おk

737 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:03:14 ]
LGPLだと、リバースエンジニアリングの拒否の禁止かな。

738 名前:732 mailto:sage [2009/06/07(日) 23:06:54 ]
リバースエンジニアリングはどうせされるんだろうし
そんなの禁止しても意味ないだろうけど・・・。

>動的リンクなら商用非公開おk
これはつまりDLLを付属させて配れってこと?


739 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:14:11 ]
>>735
強制じゃないけど
staticリンクでその条件を満たすのはかなりしんどい

740 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:14:53 ]
>>738
そうだよ配っていいんだよ


741 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:28:13 ]
ってことは

「QtのDLLを付属させてスタティックリンクしないようにするかぎり」
無償でクローズドソースの商用利用が可能

ということか。
Qtいいな。
…ちょっと考えてみようかな。


742 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 02:12:57 ]
>>715
分かりやすい解説サイト教えてください



743 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 02:20:00 ]
>>742
ggrks
相当前からあるソフトで、情報も腐るほどあるぞ




ちなみにそのウィザードもQtでできてる

744 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 03:44:59 ]
C++のテンプレートについて教えて
クラスとどう違うんだ?

745 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 03:49:36 ]
次元が違う

746 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:18:25 ]
違いすぎて逆に説明が困難だな。

747 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:19:38 ]
訂正
C++のテンプレートについて教えて
やっぱクラスとの違いじゃなくてどういう時に使うのか
どんなニーズによってできたのか教えて

748 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 04:27:42 ]
型が違うだけで同じような処理を何回も書かないで済むように

749 名前:デフォルトの名無しさん [2009/06/08(月) 06:46:52 ]
今年女子大に入ったばかりのゆきこと言います。
C++を学びたいのですが、どの本がお薦めでしょうか?


750 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 06:47:04 ]
>>744
天と地ほど違うと思うけど。

[タイヤキを作るための金属の鋳型]

[食べられるタイヤキ]
の違い。ぜんっぜん違う。


751 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 06:56:11 ]
>>742
このスレに行け。
【コメント】doxygen【コンソメ】
ttp://pc12.2ch.net/test/read.cgi/tech/1212144627/

オススメは以下。
Graphviz
ttp://www.graphviz.org/
doxygenの文字化け対策 - 僻地のプログラマkmt-t - わりとどうでもいい日記 1.1
ttp://d.hatena.ne.jp/kmt-t2/20090403/1238718375
Let’s use doxygen!
ttp://www.fides.dti.ne.jp/%7Eoka-t/doxygen.html
無題ドキュメント
ttp://www.sat.t.u-tokyo.ac.jp/~tetsuya/homeNew/research/Tips/doxygen.htm
SourceForge.net: sakura-editor ≫ DoxygenComment
ttp://sakura-editor.wiki.sourceforge.net/DoxygenComment
Doxygenマニュアル
ttp://www.doxygen.jp/manual.html
Doxygen公式
ttp://www.doxygen.jp/


752 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 10:12:17 ]
>>750
それクラスとインスタンスの違いでなくて?
テンプレートはその鋳型を付け替えるとタコ焼にも今川焼きにもなる台とか



753 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 11:03:19 ]
型チェックしてくれるマクロとでも思えば。

754 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:56:01 ]
なんだかtemplateってbindに似てるね

755 名前:デフォルトの名無しさん [2009/06/08(月) 13:03:26 ]
コンストラクタの引数の値によって、データメンバの型を変える方法ってありますか?

756 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:24:48 ]
>>749
女子供は股開いてればいいんだよ

757 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:34:28 ]
子供もかよ……

758 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:49:24 ]
ぼくおとこのこだよ…

759 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:58:54 ]
>>755
同じ親クラスから継承した子クラスという条件内であれば可能。

もしくは、void*で持たせれば、多分なんでもおkだけど。

760 名前:750 mailto:sage [2009/06/08(月) 16:12:44 ]
>>752
そうとも言えるな。
なら俺方式で言うなら
クラステンプレート=[タイヤキやら今川焼きやらを作るための金属の鋳型を作るためのナニモノか]
クラス=[タイヤキを作るための金属の鋳型]
インスタンス=[食べられるタイヤキ]
とでも言えばいいかな。

761 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 16:55:30 ]
喩えなら何とでも言えるわ。

762 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:42:54 ]
名前空間について質問です。

名前空間 foo と、それとは別に名前空間 bar::foo があるとします。
このとき、bar の内側から、bar::fooでは無い方の foo を指定するにはどうしたら良いのでしょうか。

なお、環境はWinXP、C++、VisualStudio2005です。




763 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:46:20 ]
::foo

764 名前:762 mailto:sage [2009/06/08(月) 17:53:04 ]
すみません、2つ質問するつもりで書いてませんでした。

あるクラス内に、別クラスをメンバ変数として取り込む時、
その別クラスが書かれたヘッダファイルをインクルードするのではなく、
先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね?

さて、その別クラスの名前が、名前空間 bar の下にあるとき、
namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか?


>>763
ありがとうございます。
なんで思いつかなかったんだろう、自分。

765 名前:デフォルトの名無しさん [2009/06/08(月) 18:40:27 ]
便乗質問、テンプレートクラスを持たせる時って同じ方法使えるん?

766 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:48:37 ]
使えるん

767 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:51:59 ]
>>764
あなたのいうクラスに名前が付いていないので
説明の便宜上
あるクラス=MyClass, 別クラス=fooとします。

まずは本題からちょっとそれた話から。
 > その別クラスが書かれたヘッダファイルをインクルードするのではなく、
 > 先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね?
あります。
しかし
 > あるクラス内に、別クラスをメンバ変数として取り込む時、
この場合は前方宣言Forward declarationだけでは足りません。
というのも、
class MyClass {int m_num;std::string m_str;foo m_var;}
のようにメンバ変数としてfoo型変数を使いたい場合、
fooが不完全型なのでそのサイズがわからず、したがって
MyClassのために確保すべき領域のサイズもコンパイラには分からないことになるからです。
前方宣言で足りるのはfoo型メンバ変数ではなく
foo型への参照型メンバ変数やfoo型へのポインタ型メンバ変数、
あるいはメンバ関数の戻り値としてfoo型を使用する場合などです。


768 名前:デフォルトの名無しさん [2009/06/08(月) 18:54:54 ]
ユーザが入力した数式を処理するプログラムを考えているのですが
cin>>eq;
#define function(x) (eq)
cout<<function(1);

みたいなことができませんんか?もしくは別の方法があったら教えてください

769 名前:767 mailto:sage [2009/06/08(月) 18:54:56 ]
あとはまあ
前方宣言で足りるのは
メンバ関数の引数の型としてfoo型を使用する場合

typedefとかかな。
 > さて、その別クラスの名前が、名前空間 bar の下にあるとき、
 > namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか?
それでいいと思いますが。
class bar::foo;とか書いても無理ですし、それ以外記述できないですよねぇ?

もし有識者がいらしたらそっちを信用してください。


770 名前:767 mailto:sage [2009/06/08(月) 18:56:45 ]
>>768
意味不明ですが、どういうことですか?
プリプロセッサにより
cin>>eq;
cout<<((eq));//xは無視される
として処理されるだけですが。。。

771 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:01:07 ]
>>770
768に書いたのはあくまでイメージです。言葉足らずですみません
私がしたいことは引数にある文字列を数式として扱いたいのです
もしくはcinで入力した式をプログラムで処理したいのですが


772 名前:デフォルトの名無しさん [2009/06/08(月) 19:02:27 ]
ほんとは言語の問題じゃないかもしれないけど教えてください

@double配列と、Aメンバがdoubleいっこだけの構造体の配列を読み上げる速度を比較するための
コードを書いて実行してみたらAのほうが速かったです

環境はItanium、CentOS、GCC(C++)です

これはなぜなんでしょうか?



773 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:04:08 ]
そうなったから

774 名前:767 mailto:sage [2009/06/08(月) 19:04:19 ]
>>771
言いたいことは分かりました。
C++の知識はどのくらいありますか?
STLやBoost C++はご存じですか?
C言語じゃなくてちゃんとC++らしいコードが書けますか?

775 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:05:31 ]
>>772
不思議だわ。
・・・最適化とかレジスタの割り付けとか、もう不確定要素に押されて結果が揺らいでるだけじゃないか?

つまりどっちで書いても大差ないから好きな方で記述すればよか。

776 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:08:39 ]
>>774
c++は初めて3か月くらいですが、STLはつかったものがあるので
簡単なものなら大丈夫だと思います。

777 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:09:25 ]
>>775
計算時間半分くらいでした

ちなみにこれに気づいたのは構造体メンバのアライメントに関する実験中でした




コンパイラが賢くなりすぎてマニアックな知識も必要ない時代になったんですかねえ・・・

778 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:11:11 ]
普通のポインタがインスタンスを持ってるかどうか判別する方法はありますか?
現状ではポインタのゼロ初期化とdelete・0代入を徹底するぐらいしか手段が思いつきません

779 名前:767 mailto:sage [2009/06/08(月) 19:11:28 ]
>>776
せっかくSTLの知識の有無を聞いたのですが、STLつかった実例が見つかりませんでした。
とりあえず適当なリンクを張っておきます。

以下の中で、上に挙げられている物の方が
より優れていると思ってください。

letsboost::spirit
ttp://www.kmonos.net/alang/boost/classes/spirit.html
数式解釈プログラム - uPage
ttp://www-as.dse.ibaraki.ac.jp/umezu/?%E6%95%B0%E5%BC%8F%E8%A7%A3%E9%87%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0
七行プログラミング
ttp://cm.xrea.cc/thread/program_001.html

LISPですが
記号数式処理
ttp://www-antenna.ee.titech.ac.jp/~hira/hobby/symbolic/index.html


780 名前:767 mailto:sage [2009/06/08(月) 19:13:06 ]
追記。
>>776
Spiritで数式を解釈させるなら
boost::spiritっちゃえ!
ttp://tamachan.club.kyutech.ac.jp/%7Egridbug/spirit/
C++ Labyrinth
ttp://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html
Spirit v1.6
ttp://boost.cppll.jp/BDTJ_1_30/libs/spirit/
これらが有名で質も高いと評判です。


781 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:14:34 ]
>>768
これでイメージが湧いたらそいつは一流のエスパーだwwwww

782 名前:767 mailto:sage [2009/06/08(月) 19:17:06 ]
>>778
>普通のポインタがインスタンスを持ってるかどうか
有効な領域を指し示しているかどうかとおっしゃりたいものと推測・解釈します。
結論から言えば、
普通のポインタでしたら、そんな方法はありません。
指し示す領域が有効かどうかなぞわかり得ません。



783 名前:768 mailto:sage [2009/06/08(月) 19:22:56 ]
>>782
いろいろ情報ありがとうございます。


784 名前:764 mailto:sage [2009/06/08(月) 19:45:30 ]
>>767>>769
ありがとうございます

>宣言
やっぱ namespace bar { class foo; }; って書くしか無さそうですね。
階層が深いとちょっと面倒かな?と思っただけなので、特に問題はありません。

>メンバ変数
確かに、メンバ変数を直接弄ろうとすると前方宣言だけじゃダメですよね。
まあ、素直にアクセサ付けれ、って話ですが。


>>765
確かに、 std::string とかは上記の方法じゃ出来ないですね。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<231KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef