■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part22
751 名前:デフォルトの名無しさん :03/08/28 12:32
最適化ってどうやってやるの?Borland C++ Compiler5.5とBCC Developerでも
できるの?
できるなら教えて

752 名前:デフォルトの名無しさん :03/08/28 12:40
>>751
マルチ 回答しないように。
http://pc2.2ch.net/test/read.cgi/tech/1060706382/340


753 名前:デフォルトの名無しさん :03/08/28 13:12
マルチでなくても回答したくないなw

754 名前:デフォルトの名無しさん :03/08/28 16:46

>>750
ヌヒよ、STLport の runtime_error は、感心なことに char の静的配列で
メッセージを保持しているので、単純に std::string を渡せないよ


755 名前:デフォルトの名無しさん :03/08/28 20:16
C++を使いたいんだけれど、Cのコンパイラしか用意されていない環境を渡されました。
C++のコードをCに変換するツールで、どんなのが有名ですか?
どなたかよろしくお願いします。

756 名前:デフォルトの名無しさん :03/08/28 20:21
>>755
現代的なものは存在しません



757 名前:デフォルトの名無しさん :03/08/28 20:23
堤さやかちゃんの引退記念作です。
可愛らしい顔に大きなオッパイ少女っぽいパンティーがそそります。
絡み自体はいたってノーマルですがこの子がやっているだけで下半身に血が集まります。
本気で感じている姿はやっぱいいですね。
モロ見え動画を無料でゲッツ!!
http://www.pinktrip.com/

758 名前:デフォルトの名無しさん :03/08/28 20:25
>>756
そうなんですか?
確かに昔のC++であれば、コンパイラがCのソースコードを
出力してくれるオプションがあったのですが、
出来ればtemplateなども使いたいので別のを探していました。
困ったな…

759 名前:デフォルトの名無しさん :03/08/28 20:26
gccをコンパイルすればよろし。

760 名前:デフォルトの名無しさん :03/08/28 20:34
>>759
それもありだね。気づかなかった、サンクス。
でもコンパイル通るかな…不安

761 名前:デフォルトの名無しさん :03/08/28 20:44
というより、コードセットが全然違うから手におえないぽ。
組み込み系なので、しかも新しいチップらしくて
その会社が提供してくれる開発キットしかつかえない状況(どこのかばれそう)。

調べてみると、CFront系コンパイラがその機能を持っているけれど、
有料みたいですね。で、米では古いg++で可能というデマが出ているらしい。

762 名前:デフォルトの名無しさん :03/08/28 20:45
MIWA C++

763 名前:デフォルトの名無しさん :03/08/28 20:53
>>762
草の根通信時代のコンパイラですか?現存してなさそうですが

764 名前:デフォルトの名無しさん :03/08/28 21:00
大人しく C を使うのが一番かと。

765 名前:デフォルトの名無しさん :03/08/28 21:05
gccの出力を、アセンブラっぽいCにするという手も、、

766 名前:デフォルトの名無しさん :03/08/28 21:06
#if _DEBUG
#define IF_DEBUG
#else
#define CAT(a,b) a##b
#define IF_DEBUG CAT(/,/)
#endif

main(){
IF_DEBUG int i=0;

}

_DEBUGが定義されていないときはその行がコメントアウトされるマクロ、
こんなん考えたのですが、これはC++として正しいプログラムなのでしょうか?


767 名前:デフォルトの名無しさん :03/08/28 21:10
>>764
かもしれませんね。
フリーのC++ to C translatorが無いとは思いませんでした。
意外と作るのは難しいのかもしれませんね。

768 名前:デフォルトの名無しさん :03/08/28 21:20
>>766
激しく処理系依存な予感
つーか、よくあるイディオム使っとけよ

#if _DEBUG
#define DBG(stmt) stmt
#else
#define DBG(stmt)
#else

main(){
DBG( int i = 0; )
}

769 名前:デフォルトの名無しさん :03/08/28 21:21
>>766
昔はそういうことしてたこともあったけど、
ちゃんとしたプリプロセッサなら
// はトークンじゃないから / と / とは繋げられない
って警告されると思う。
gcc ver 3.2.2 の cpp だと / と / が繋げられずに、
間に空白が入ってしまうようだ。

770 名前:デフォルトの名無しさん :03/08/28 22:32
C++ネタではないと思うのでsageで。
「トリッキーなコード」初代スレに
デバッグコードの話題が挙がっていた。

#ifdef DEBUG
#define debug
#else
#define debug 1? (void*)0:
#endif

これでdebug printf("aaaaa");みたいな書き方が出来る。
debug int i=0;は出来ないけれど、
debug for(;;){...} が出来る、らしい。

個人的には面倒でもわかりやすく#ifdef..#endifを使えばいいと思うけど。

771 名前:デフォルトの名無しさん :03/08/28 22:47
>>770
お前のせいでトリッキースレを読み直してしまったじゃないか!

772 名前:デフォルトの名無しさん :03/08/28 22:50
>767
意外と、って......
C++の経験あまりないでしょ。



773 名前:デフォルトの名無しさん :03/08/28 22:59
772は無能

774 名前:デフォルトの名無しさん :03/08/28 23:01
皆さんは、命名規則ってはっきり決めてます?
俺は、かなり優柔不断です。
vector<T> の変数が 語尾にs つけたり、Vectorつけたり
カウント変数も nCount だったり iCount だったり
クラス名は、Cで始まるけど、構造体等は、あやふや
ハンガリアンだけじゃ生きていけない。

会社でも、個人でもいいから命名規則おしえてください。

とりあえず、template
■型
クラス              :
インターフェースクラス :
クラステンプレート    :
構造体             :
1行のマクロ        :
複数行(関数)マクロ  :
関数テンプレート      :
名前空間           :

■変数名
数値(個数)     :
文字列         :
文字列クラス   :
std::vectorの変数名   :
std::listの変数名    :

775 名前:デフォルトの名無しさん :03/08/28 23:04
果物の名前を思いついた順に使う

776 名前:デフォルトの名無しさん :03/08/28 23:06
■型
クラス              :先頭に C (CClass)
インターフェースクラス :先頭に I (IClass)
クラステンプレート    :小文字?
構造体             :先頭にST_ (ST_Struct)
1行のマクロ        :
複数行(関数)マクロ  :
関数テンプレート      :普通に
名前空間           :

■変数名
数値(個数)     :nCount
文字列         :sz
文字列クラス   :sz
std::vectorの変数名   :後ろにs
std::listの変数名    :後ろに_list


書き忘れ、
メソッド名         :最初大文字 obj.GetHandle()
std::list 使った型名 :
std::vector使った型名:

たくさんありすぎる・・・。

かなりギモンヌ。

777 名前:デフォルトの名無しさん :03/08/28 23:07
また命名規約ですか?もうお腹いっぱい。

778 名前:デフォルトの名無しさん :03/08/28 23:09
>>777
おなかいっぱいだけど、
ハッキリした答えが見つからぬ。
ギモンヌ

779 名前:デフォルトの名無しさん :03/08/28 23:09
コーディング規約
http://pc2.2ch.net/test/read.cgi/tech/1056716338/


780 名前:デフォルトの名無しさん :03/08/28 23:10
>>779
素敵。
そっちに逃げます。
ありがとう。

781 名前:デフォルトの名無しさん :03/08/28 23:14
>>775
大昔、まだプログラム(アセンブリ)を覚えたてのころ、
ラベルに何をつけていいのかわからなくって、手当たり次第にそれをやってた。
ラベルには意味のある言葉をつけるって学んだのは就職してから。

782 名前:デフォルトの名無しさん :03/08/28 23:16
テンプレートがらみの問題について教えてください.
N 分木 ? (2 分木ではなく 1 対 N な関係の木) を実装しようと思い,
#include <vector>
using namespace std;
template<class T> class Tree {
  T data;
  vector<Tree<T> > next;
 public:
  Tree(void) {}
  ~Tree(void) {}
  void PrintTree(void) {
   vector<Tree<T> >::iterator iter = next.begin();
  }
} ;
というクラスを書いたのですが, g++ 3.3.1 (-ansi -pedantic オプション付き)で
コンパイルしたところ,
> tree.h:17: error: 構文解析エラー before `;' token
という error がでました. 17 行目とは
> vector<Tree<T> >::iterator iter = next.begin();
です.
この場合, どのように書くのが正しいのか教えてもらえないでしょうか.
プログラミング言語 C++ も手元にあるので, どこを読めという
アドバイスでもかまいません. テンプレートの章を読んだのですが,
私には分かりませんでした.

783 名前:デフォルトの名無しさん :03/08/28 23:21
>>782
typename vector<Tree<T> >::iterator iter = next.begin();


784 名前:デフォルトの名無しさん :03/08/28 23:25
class Tree {
 vector<Tree> next;
};
って書き方、出来るの?

785 名前:デフォルトの名無しさん :03/08/28 23:31
class じゃなく
struct で

operator や
メソッド 書いてるのがあったりするんですが、
何か特別な意味があるんですか?
継承もできるっぽいし。

786 名前:デフォルトの名無しさん :03/08/28 23:42
>>783
ありがとうございます.
>>783 の書き方でコンパイルできて, とりあえず動いていることを確認しました.
typename は プログラミング言語 C++ では p.969 にのってました.
後で勉強しておきます.

>>784
class Tree {
Tree next;
} ;
はできないのに, vector<Tree> next ならできるのか ? という話ですか ?
一応 error なくコンパイルは通ってます. よく分かってないのですが,
テンプレートなので ? 大丈夫なのだろうと, 自分を納得させてます.

787 名前:デフォルトの名無しさん :03/08/28 23:44
>>785
structとclassは、デフォルトのスコープが違うだけで他は全く同じに使える。
だから、特別な意味を持たせてるかどうかは、書いた本人に聞くしかないな。


788 名前:デフォルトの名無しさん :03/08/28 23:48
>vector<Tree> next ならできるのか
vectorの実装しだいだと思うが
積極的に不完全な型でもいいとはどこにもないな

789 名前:デフォルトの名無しさん :03/08/28 23:53
>>784,786
vector< Tree<T> > は別に Tree の実体を直接確保するわけじゃないからね。
ポインタを持っておいて、動的確保するのが普通だから。
まぁ、厳密に言えば実装依存なんだろうけど、多分問題になることはないと思う。

790 名前:デフォルトの名無しさん :03/08/29 00:07
g++で-ansiってつかえるんだ。


791 名前:786 :03/08/29 00:15
>>788 >>789
なるほど, 実装依存ですか. すると vector<Tree<T>*> としておいたほうが
安全だという理解で正しいですか. ちょっと書き換えてみようと思います.

792 名前:デフォルトの名無しさん :03/08/29 00:25
確かに配列伸ばしたときのコピーが
vector< Tree<T> > のままだと激重になりそうだな。

793 名前:デフォルトの名無しさん :03/08/29 01:40
>>754
>STLport の runtime_error は、感心なことに char の静的配列で
>メッセージを保持しているので、単純に std::string を渡せないよ
詳細説明熱望


794 名前:デフォルトの名無しさん :03/08/29 01:54
>>754
>メッセージを保持しているので、単純に std::string を渡せないよ
ブブー。

795 名前:デフォルトの名無しさん :03/08/29 08:08
>>755
Comeau C++は現代的だとは思うが。
出力はCだよな。

796 名前:デフォルトの名無しさん :03/08/29 11:32
>>795
ページを見てみたが、translator機能が見当たらなかった。
どちらにしろフリーではないようだね

797 名前:デフォルトの名無しさん :03/08/29 13:51
>796
Comeauが使用しているEDG
http://www.edg.com/cpp.html
が、C++から中間言語
The front end translates source programs into a high-level, tree-structured, in-memory intermediate language.
へのtranslateを行なうってだけで、ComeauがC++ to Cを行なうことは
なかったように思われ。795は情報へのポインタをください。



798 名前:デフォルトの名無しさん :03/08/29 13:51
>>797
ageるなよ

799 名前:デフォルトの名無しさん :03/08/29 13:53
>798
why?


800 名前:デフォルトの名無しさん :03/08/29 13:57
>>799
最近 sage を覚えたのがうれしいんだよ。
そっとしておいてやんな。

801 名前:デフォルトの名無しさん :03/08/29 14:16
>>800
ワラタ

802 名前:デフォルトの名無しさん :03/08/29 14:17
なにかとすぐ「ワラタ」

803 名前:800 :03/08/29 14:22
>>801
心外です。

804 名前:デフォルトの名無しさん :03/08/29 17:19
>>797
http://www.comeaucomputing.com/faqs/genfaq.html#history
Can you tell me more about C Compiler support?

Comeau C++ 4.3.0 is a full and true compiler that performs full syntax
checking, full semantic checking, full error checking and all other compiler
duties. Input C++ code is translated into internal compiler trees and
symbol tables looking nothing like C++ or C. As well, it generates
an internal proprietary intermediate form. But instead of using
a proprietary back end code generator, Comeau C++ 4.3.0 generates
C code as its output. (略)

805 名前:デフォルトの名無しさん :03/08/29 17:25
>>802
ツマンネ

806 名前:デフォルトの名無しさん :03/08/29 17:29
>>805
別に面白がらせるレスじゃねえだろう。

807 名前:デフォルトの名無しさん :03/08/29 17:48
>>806
ワラタ(プ

808 名前:デフォルトの名無しさん :03/08/29 17:56
>>807
ツマンネ

809 名前:デフォルトの名無しさん :03/08/29 18:02
fflush(>>807);

810 名前:デフォルトの名無しさん :03/08/29 18:04
よそでやれボケども

811 名前:デフォルトの名無しさん :03/08/29 19:50
std:string s;
char c[16];

s = "おまんこぺろぺろ";
c = (char *)s;

みたいなことはできませんか?

812 名前:デフォルトの名無しさん :03/08/29 19:52
strcpy(c, s.c_str());

813 名前:811 :03/08/29 20:00
>>812

で、できますたー! ありがd。

814 名前:デフォルトの名無しさん :03/08/29 20:01
>812
たいがいの文字コードでスタックが壊れるぞ。


815 名前:811 :03/08/29 20:02
>>814
じゃあ、どうすりゃいいのさ、すんすすん。

816 名前:デフォルトの名無しさん :03/08/29 20:04
>>815
なぜ配列にコピーしたいのか

817 名前:811 :03/08/29 20:07
>>816
char型でないと引数として受け付けない関数があるからです。
MFCとか。

818 名前:デフォルトの名無しさん :03/08/29 20:11
>>817
ならs.c_str()で直接参照するのが普通だが

819 名前:デフォルトの名無しさん :03/08/29 20:14
char*の内容が変更されないと保証できるなら
const_cast<char*>(s)
でもいいと思うが、これってマズい?>識者

820 名前:デフォルトの名無しさん :03/08/29 20:18
>>819
まあ呼ぶたびにキャストするよりは、
変換インライン関数でも作ったほうが安心ね
inline void hoge( const char * ps )
{
// c_hogeの引数は、指す先を書き換えないことが保証されているのに
// 宣言にconstが付いておらず、それを修正することが許されないってことで
// 仲介する
c_hoge( const_cast<char *>(ps) );
}


821 名前:デフォルトの名無しさん :03/08/29 20:24
>>817
ワラタ
初心者にありがちなパターンだな。
やはり、まず何がしたいかを書くべきだったよな。

822 名前:デフォルトの名無しさん :03/08/29 20:25
>>815
s.copy(c, sizeof(c));

823 名前:デフォルトの名無しさん :03/08/29 20:26
いつからconst char*に変換できるようになったんじゃstd::stringは!
javaばっかやっててボケたかな?おれ。

824 名前:デフォルトの名無しさん :03/08/29 20:32
配列の大きさは17にした方が良かったな。

825 名前:デフォルトの名無しさん :03/08/29 20:51
>>823
最初からです

826 名前:デフォルトの名無しさん :03/08/29 21:01
つーか固定長の配列にstrcpyすんなよ

827 名前:デフォルトの名無しさん :03/08/29 21:17
>>826
十分なら別にいいだろ

828 名前:811 :03/08/29 21:25
ひゃっほう。みなさんありがとうございます。m(__)m
s.c_str()で直接参照ですね。勉強になりました。

829 名前:デフォルトの名無しさん :03/08/29 23:19
>>825
そんなかっこわるい仕様あるか!

830 名前:デフォルトの名無しさん :03/08/30 01:18
つーか、MFC使うんだったらCString使えば?
#とは言え、CObArrayを使われるのは勘弁と思う私は半端者。

831 名前:デフォルトの名無しさん :03/08/30 01:44
>829
811は練炭で(r


832 名前:デフォルトの名無しさん :03/08/30 07:09
CPUのパイプラインについての読み物を読んでいて思ったのですが
a = b + c
d = a - e
で、データハザードを起こしてしまうのなら
a = b + c
d = b + c - e
と書いた方が速いのでしょうか?

833 名前:デフォルトの名無しさん :03/08/30 07:41
>>832
mov eax, b; add eax, c; mov a, eax;
sub eax, e; mov d, eax;
この程度の最適化はやってくれそうだけど。

834 名前:833 :03/08/30 07:49
>>832
gcc -O3 -S で出力してみた。最適化されてる。
(extern int a,b,c,d,e; で宣言。)

movl _e, %ecx
movl _c, %eax
movl _b, %edx
addl %edx, %eax
movl %eax, _a
subl %ecx, %eax
movl %eax, _d

835 名前:833 :03/08/30 08:04
>>832
a(=b+c)が計算される前にd(=a-e)を求めるときの内部μOPの
ストールのことを言ってるなら、d=b+cを求める最短パスは
a(b+c)がすでに通ってる。メモリに直接アクセスするような
指定がないなら、d=b+cはあまり意味がないと思うな。
aとdの間にストールを和らげる計算を入れるくらいしか漏れには
思いつかない。

836 名前:デフォルトの名無しさん :03/08/30 08:17
>>834
なぜ、そこで外部変数が出てくるんだ?

837 名前:デフォルトの名無しさん :03/08/30 09:19
>>832
仮にそのままマシン語に落ちたとしても、
b + c の出力を forward して a - e の入力に(レジスタを介さず)
直接たたき込むくらいのことは今時のCPUならやってるので、
気にせんでいいと思う。

838 名前:デフォルトの名無しさん :03/08/30 09:49
小手先の最適化は無駄でFA

839 名前:デフォルトの名無しさん :03/08/30 09:58
結局フリーのC++ to C translatorはないということでファイナルアンサーですよね?

840 名前:デフォルトの名無しさん :03/08/30 11:48
>>838
タイトなループ中で参照するデータだと、数行の変更で大きな効果が
得られる場合もある。多次元配列のループ順序を入れ替えるとデータ
キャッシュのヒット率が劇的に向上するとか、テーブルのサイズを
2^n にしておくと検索が速くなったりとか。

数値演算とかやってるのでなければ、あまに気にしなくて良いと思うけど。

841 名前:832 :03/08/30 13:50
いろいろアドバイスありがd。
自分でも調べてみましたが分岐やループが出てこない限り加算減算程度では気にしなくてよさそうですね。
私なんかよりコンパイラの最適化のほうが遙かに工数少なくて賢いや_| ̄|○

おまけ
ただの加算減算でおもしろいなと思った最適化にMMXの飽和演算(paddsw)があったのでご報告。
条件分岐を1個2個減らせます。

842 名前:デフォルトの名無しさん :03/08/30 16:53
WideStudioでC++プログラミングに挑戦したいのですが、
使い勝手はどうですか?

843 名前:デフォルトの名無しさん :03/08/30 17:41
>>842
10分ほど触ってみただけだが、所詮はフリーの玩具にすぎないと思った

844 名前:デフォルトの名無しさん :03/08/30 18:13
つーかスレ違い

845 名前:デフォルトの名無しさん :03/08/30 20:14
Windowsを構成している言語はC++なのでしょうか?

846 名前:デフォルトの名無しさん :03/08/30 20:23
そんなこと知ってどーすんの?

847 名前:デフォルトの名無しさん :03/08/30 20:24
NTは約4メガラインのC++と何かに書いてあった

848 名前:デフォルトの名無しさん :03/08/30 20:34
OS作る

849 名前:デフォルトの名無しさん :03/08/30 22:54
effectiveC++の105ページで、result = oneHalf * 2; が問題なしって
書いてあるんですけど、本当にコンパイル通るんですか?

850 名前:デフォルトの名無しさん :03/08/30 23:17
やっとeffectiveC++のダウンロードが終わった。
なんだoperator*の話じゃないか。
メンバで定義できるのは右側に引数が結合する場合だけって事。

851 名前:デフォルトの名無しさん :03/08/31 01:05
APIまでC++にしてしまって悲惨なことになったのはBeOSだっけか

852 名前:デフォルトの名無しさん :03/08/31 01:49
>>851
その話のソースって何?
ダミーのvtableエントリやメンバ変数を持たせて
一応は変更に対応できるようにしていたようだけど、やっぱり破綻したの?

853 名前:デフォルトの名無しさん :03/08/31 03:03
>>850
いやそうじゃなくて、
  result = oneHalf * 2;
が暗黙的に
  Rational temp(2);
  result = oneHalf * temp;
になるって所でつまづいていたのです。

コンパイルが通らなかったのは私のタイプミスで、
  const Rational operator*( const Rational& rhs ) const;
と書くべき所を、
  const Rational operator*( Rational& rhs ) const;
というように、引数の型のところにconstを付けてなかったのが原因でした。

でも、なんでconst無いとダメなのかが判りません。
誰か教えてください。

854 名前:デフォルトの名無しさん :03/08/31 03:29
const関数である事が原因?

855 名前:デフォルトの名無しさん :03/08/31 03:47
>>853
2は直接Rational&には変換できないからまずrvalueのRational(2)に変換され
次にこれはrvalueであるからconst Rational&に参照されなくてはならない

のだと思う。

856 名前:デフォルトの名無しさん :03/08/31 03:50
暗黙の型変換ってやつだな

857 名前:デフォルトの名無しさん :03/08/31 03:56
>>850のダウンロード云々というのは、どういう事なのでしょうか?
最近学術目的で、アメリカでは美術書なんかを無料でウェブ公開
しているそうですが、そんな感じだと嬉しいな…。

ただのCDオンライン販売とかだったら、すいません。

それにしてもPDFで48Pまで読めるんですね。ちと得した気分。

858 名前:デフォルトの名無しさん :03/08/31 04:16
普通に検索するとでてくるな。
EffectiveとMore Effectiveの入った英語CD-ROM版で7.4MBのようだ。
正規の配布でないことは間違いない。

web.njit.edu/~dupre/effectivec++/
www.scorpions.net/~fygrave/misc/effectivecpp.tar.gz
www.dingbing.com/book/new/C_C++/standand_c/cppefmef.rar
jztele.com/~coldice/book/C_C++/cppefmef.rar

859 名前:デフォルトの名無しさん :03/08/31 04:34
>>858
レスありがとうございます。

にしても、なんとコメントしていいやら。
あいやーeduドメインまで…。
とりあえず謎は解けました。感謝です。

860 名前:デフォルトの名無しさん :03/08/31 06:34
#include <iostream>
#include <new>
using namespase std;

class Base{
//省略
};

int main()
{
Base *p1 = static_cast<Base *> (::operator new(sizeof(Base)*5));
//省略
delete p1;
}

すいません、この場合なぜスコープ解決演算子が必要なのでしょうか。
あと、確保したメモリはdelete p1ですべて開放されるのでしょうか。
教えてくださいm(__)m

861 名前:デフォルトの名無しさん :03/08/31 12:56
>>860
こうか?

class Base {
};

int main( ){
Base* b = new Base[5];
delete[] b;
return 0;
}


862 名前:デフォルトの名無しさん :03/08/31 13:17
namespace
operator delete

863 名前:デフォルトの名無しさん :03/08/31 14:56
>>853
よく読みましょ。
私の手元の「Effective C++ 改定2版」だと105ページの一番下の行です。
暗黙的に変換されるのは
Rational temp(2);
ではなく、
const Rational temp(2);
^^^^^
です。数値リテラル 2 は、そりゃ変更不能ですからconstってことです。
ということは、あなたの
const Rational operator*( Rational& rhs ) const;
の宣言では、関数内で引数を「変更する」と宣言してるので、
当然変更不能なconst Rationalは渡すことができません。
変更されたら困りますからね。っていうかソースコード中に定数で 2 って
書いてあるんだからそもそも変更しようったって無理な話で…

だから、「引数は変更しないよ」と宣言してやれば、OKなわけです。
// そしてもちろんそのときには関数内部で実際に引数を変更しようとすればコンパイル通りません。

864 名前:デフォルトの名無しさん :03/08/31 15:02
>>863
ハァ?

865 名前:デフォルトの名無しさん :03/08/31 15:11
>>863
それ、妄想じゃぁないの?

866 名前:デフォルトの名無しさん :03/08/31 15:53
他ライブラリ(stdioとか)に依存しないフリーのiostreamの実装って在りますか?

867 名前:  :03/08/31 16:50
863はだいたいあってると思うけど
>数値リテラル 2 は、そりゃ変更不能ですからconstってことです
はちょっと違うと思う。リテラルが変更不能とかはこの場合関係ない。

暗黙の変換で作られる一時オブジェクトを変更しても無意味だし、それを許すとわかりずらいバグの元になるから
暗黙の変換で作られる一時オブジェクトはconstと定義されてるものとしてるんでしょ。

例えば
int x ;
x = 2;
result = oneHalf * x;
この場合xは変数だけど暗黙の変換で作られる一時オブジェクトは
const Rational temp(x)てなかんじになり
result = oneHalf.operator*(temp);
というふうになる。tempはconstだからoperator*の定義で引数はconstへの参照にしないとコンパイルできない。


868 名前:デフォルトの名無しさん :03/08/31 17:01
非const参照は一時オブジェクトで初期化できない。それがルールだ。
一時オブジェクトがconstかどうかは関係ない。

869 名前:863 :03/08/31 17:03
>>864-865
_;)ノシ ゴメンナサイ

>>867
)ノシ テイセイ アリガトウ




∧||∧

870 名前:デフォルトの名無しさん :03/08/31 19:05
>839
Comeauがあるってば。


871 名前:デフォルトの名無しさん :03/08/31 19:08
>>870
フリーじゃないってことでは

872 名前:デフォルトの名無しさん :03/08/31 19:42
>>861
レス有難うございます。
Effective C++という本の63ページにこう書いてあるのですが、
これはそういう意味なんでしょうか?
(すいません、初心者なんですがほかの本には、こういうnewの引数
 の例が載ってないので解りません。)

>>862
ご指摘有難うございます。
あの、2行目のoperator deleteというのは、この場合はこう書かなければ
メモリが開放されないということですか?

873 名前:861 :03/08/31 20:03
その本嫌いで捨てちゃったから例題の意図がわかんないんだけど
>Base *p1 = static_cast<Base *> (::operator new(sizeof(Base)*5));
こんなんじゃコンストラクタ呼ばれないんじゃない?
861みたいなんで万事OKと思うんですが。

874 名前:デフォルトの名無しさん :03/08/31 20:05
>>873
同意
やっちゃいけない例なのかな?

875 名前:デフォルトの名無しさん :03/08/31 20:13
>>873
レス有難うございます。
普通に割り当てると、管理用の追加データ領域が含まれるので、
小さいオブジェクトをたくさん割り当てる場合この方がメモリ
が節約されるって書いてあります。
はい、コンストラクタは呼ばれませんでした。

>>874
そうなのですか、有難うございます。

876 名前:デフォルトの名無しさん :03/08/31 20:15
vector<Base *> base_vec;

base_vec.resize(5);

よーするにこういうことがしたかったのでは無いだろうか・・・


877 名前:デフォルトの名無しさん :03/08/31 20:24
>>876
そうですか、
有難うございました。

878 名前:デフォルトの名無しさん :03/08/31 20:32
>>875
....
Effective C++のp.63だな?
それ、operator newを実装するときの処理じゃんか。
ならそれでいいよ。

879 名前:デフォルトの名無しさん :03/08/31 20:34
>>878
補足。
それを >>860 のように使うのは駄目。

880 名前:デフォルトの名無しさん :03/08/31 20:53
>>878
>>879
operator newの実装ですか?
(すいません、よく解りません。もっと勉強します。)
有難うございました。

881 名前:デフォルトの名無しさん :03/09/01 00:30
cygwinのg++であるテストプログラムをコンパイルしたら次のようなエラーメッセージ
がでました。

g++ -lm -lgdi32 Test.o -o Test
/usr/lib/gcc-lib/i686-pc-cygwin/3.2/../../../libcygwin.a(libcmain.o)(.text+0x7c)
: undefined reference to `_WinMain@16'
collect2: ld returned 1 exit status
make: *** [Test] Error 1

WinMain@16なんて関係ないとおもうんですが・・・・
インストールしているVCの環境変数が禍したりするのでしょうか?

882 名前:デフォルトの名無しさん :03/09/01 00:34
> WinMain@16なんて関係ないとおもうんですが・・・・
何故関係ないとおもうのか500字以内で述べてくれ。話はそれからだ。

883 名前:デフォルトの名無しさん :03/09/01 00:35
>>881
「-lgdi32」しといて「WinMain@16なんて関係ないとおもうんですが」とはこれ如何に。

884 名前:デフォルトの名無しさん :03/09/01 00:36
>>882
説明されてもウザイだろ。スレ違いは追い出せよ。
まぁ>>881はmainでも定義してから適切なスレに逝けってこった。

885 名前:デフォルトの名無しさん :03/09/01 09:11
ちょっと曖昧ですいません。STLのbegin()〜end()範囲の外側に
もうひとつポイントがある・・・・なんて話ありましたっけ?

STLじゃなかったかも知れないのですが、確かC++の話でして。
似たような事を何かで聞いたことありましたら、教えてください。

886 名前:デフォルトの名無しさん :03/09/01 09:17
>>885
曖昧すぎる

887 名前:デフォルトの名無しさん :03/09/01 09:34
>>885
end()がコンテナの外側、って話か?

888 名前:デフォルトの名無しさん :03/09/01 09:56
>>887
今やってみました。この話だったみたいです。
助かりました、ありがとうございます!

889 名前:デフォルトの名無しさん :03/09/01 12:33
ccってC++コンパイラでつか?

890 名前:デフォルトの名無しさん :03/09/01 14:50
>>889
普通はCコンパイラ。
OSベンダ製のCコンパイラだったり、
もしかすると gcc へのシンボリックリンクだったりする。

891 名前:デフォルトの名無しさん :03/09/01 16:08
質問です。

if( handle == 0 )
 throw std::runtime_error( "error! :: invalid handle" );

上記のような状況で、
std::string の一時オブジェクトを作成中や、
std::string 型のメンバ変数にメッセージをコピーする際に例外が発生した場合、
どのような例外が発生するのでしょうか?



892 名前:デフォルトの名無しさん :03/09/01 16:29
>>891
throwは演算子なのでオペランドが先に評価される。
#include <iostream>
#include <string>
#include <stdexcept>

struct My_exception{};
struct My_class
{
    operator std::string(){throw My_exception(); return "unko";}
};

int main()
try{
    throw std::runtime_error(My_class());
}
catch(My_exception &)
{
    std::cout << "My_exception\n";
}
catch(std::runtime_error &)
{
    std::cout << "std::runtime_error\n";
}


893 名前:849 :03/09/01 18:21
遅くなりましたけど、863さん、867さん、868さん、
ありがとうございました。

868さんが書いてくれたルールの為、constで無ければ駄目
という認識でいいのかな?

もう少し基礎的な所をしっかり勉強しないと駄目ですね。
また本買ってくるか・・・

894 名前:35 :03/09/02 02:05
いまさら >>35です。ちょっとほっぽいておいたんですが
おいたんですがやはり問題が再燃しました。

>>183 さんへ:
残念ながら targetは VC++じゃないのです。
組み込み系で、どんな compilerが使われるかわからんので、
処理系依存の方法はとりたくないし...

ちなみに static operator new とかを headerで宣言してやれば
いいのじゃないか、とか思いましたが、operetor new は externって
決ってるらしいですな。

どうやらしこしこ手で置き換えるしかなさそうな雰囲気です。
まったく、糞ライブラリめ...


895 名前:デフォルトの名無しさん :03/09/02 02:16
>>35
Javaに乗り換え時かも。

896 名前:デフォルトの名無しさん :03/09/02 03:38
クラスを継承することは出来ないの?
operator newだけ書き換える形で。

897 名前: :03/09/02 16:10
お前ら、C++ のソースファイルの拡張子は何にしていますか?

cc & hh 派?
cpp & hpp 派?
それともその他?

898 名前:デフォルトの名無しさん :03/09/02 16:12
Win : cpp & h
PS2 : cc & h

899 名前: :03/09/02 16:14
>>898
そういや、新しい(漏れの仲ではまだ新しいほうなんだよ)規格(?)では
<iostream.h> じゃなくて <iostream> って書くことになってるけど、
これはソースコード内に処理系依存の拡張子に関するごたごたを持ち込まないためなのかな?

a.h a.hpp なんかが混在する場合にどれが使われるかは処理系依存?


900 名前:GNU Make :03/09/02 16:43
Compiling C programs
`n.o' is made automatically from `n.c' with a command of the form
`$(CC) -c $(CPPFLAGS) $(CFLAGS)'.

Compiling C++ programs
`n.o' is made automatically from `n.cc' or `n.C' with a command of the form
`$(CXX) -c $(CPPFLAGS) $(CXXFLAGS)'.
We encourage you to use the suffix `.cc' for C++ source files instead of `.C'.

GNU 厨な漏れは盲目的に *.cc を使ってます。
んでその勢いで *.hh をヘッダファイル用に使ってるんだけど、

The default suffix list is: .out, .a, .ln, .o, .c, .cc, .C, .p, .f, .F, .r, .y, .l, .s, .S, .mod, .sym, .def,
.h, .info, .dvi, .tex, .texinfo, .texi, .txinfo, .w, .ch .web, .sh, .elc, .el

なんだよな… *.h は入ってるけど *.hh は入ってない…

そういや、Borland C++ なんかに付属している make はどうなんだろ…

901 名前:デフォルトの名無しさん :03/09/02 16:59
ヘッダーファイルに拡張子なんてつけなくていいじゃん。

902 名前:デフォルトの名無しさん :03/09/02 17:00
>899
あきれるくらい間違えてるぞ。

903 名前:デフォルトの名無しさん :03/09/02 17:01
>>902
そういう時はどう間違えているのか指摘するのが筋ってものです。

904 名前:デフォルトの名無しさん :03/09/02 17:04
>>902
つまり勝手に拡張子の補完(?)なんかはやらない、と…

905 名前:デフォルトの名無しさん :03/09/02 17:57
<iostream.h>
元々のヘッダ。まだnamespaceは、なかった。
<iostream>
 namespaceができた。stdを指定する必要あり。

互換性のため、過去のヘッダも残す必要があったため、新しいヘッダを.hなしとした。

906 名前:デフォルトの名無しさん :03/09/02 18:02
ちなみに、ボーランドのbcc32は、
#include <stdio>
と書くと、stdio.hを探してインクルードしてくれる。
この大きなお世話機能のおかげで、混乱するヤシもいるんじゃないかな。

907 名前:デフォルトの名無しさん :03/09/02 18:17
>>905
iostreamに関するヘッダファイルの実体がなんであろうと、
統一的な指定でincludeするっていう特別扱いではなくて、
単にiostreamってファイルをincludeするだけなの?

908 名前:デフォルトの名無しさん :03/09/02 18:25
>>907
iostream というファイルと iostream.h という2種類のファイルが存在することになっている。
というか、2種類あると思ってよい。
ただ、処理系によってはうまくごまかしている場合もあるということだ。
しかし、それをユーザーが気にする必要はない。
あくまで、2種類のファイルが存在するのだ。

909 名前:デフォルトの名無しさん :03/09/02 18:33
iostreamとiostream.hの違いが、こんなに知られていないとは思わなかった。

910 名前:デフォルトの名無しさん :03/09/02 18:59
めちゃくちゃ

まず#include <name>はnameに処理系依存で対応するヘッダを
読み込むのであってファイル名nameを読み込むのではない。
同名のファイルを読み込むのは#include "name"
そして標準C++ではiostream.hというヘッダは廃止された
だから#include <iostraem>しかないが、このとき読み込まれるファイルが
何であるかは上の規則によって処理系依存。これを踏まえて

>iostreamに関するヘッダファイルの実体がなんであろうと、
>統一的な指定でincludeする
これは正しい

>iostream というファイルと iostream.h という2種類のファイルが存在することになっている
これは間違い

>iostreamとiostream.hの違い
違いというよりも標準C++にiostream.hはない

911 名前:デフォルトの名無しさん :03/09/02 20:36
トリッキースレから来ました。
>>894=35が何を訴えたかったのかよく理解していないんだけど、
もし何らかのクラスにoperator newを付け加えたいだけ
(かつヘッダファイルの変更が認められておらずクラス名も変えたくない)
であれば、こういうのはどうでしょう?

#define CSomeClass CSomeClass_Original
#include "original.h"
#undef CSomeClass
class CSomeClass : public CSomeClass_Original {
...
};

912 名前:35 :03/09/02 22:03
>>911 むむ、それもトリッキーですな。
しかしやりたいことはちと違って、
ヘッダは書き換えてもいいんだけどライブラリの version up
について行くのが面倒だからなるべく手をいれたくない。
って、感じです。
あと、classの new/delete operatorじゃ、
new char[m_size]とかにも対応できないし。

結局約100個の class宣言に : public MemManager とかいれて
primitive type の new[]、delete[]を手で置き換えてます。
やれやれ。
# M-x tags-searchえらい


913 名前:デフォルトの名無しさん :03/09/02 22:15
うーん、やはり見当違いでしたか。申し訳ない。
要するに、標準のnewオペレータ自体を入れ替えるという事ですか。

914 名前:35 :03/09/02 23:08
いえいえ、アドバイスありがとうございます。
煽られなかっただけよかったです。
global new/deleteを置き換えられれば楽なんですが値、、、

915 名前:デフォルトの名無しさん :03/09/03 00:11
void *operator new ( size_t Size , int lib);
void __cdecl operator delete(void* p, size_t Size);

#define new new(1)
#include "a_lib.h"
#undef new
#define new new(2)
#incluede "b_lib.h"
...
という手段はどうか。

916 名前:デフォルトの名無しさん :03/09/03 00:16
一応プロのプログラマーです。
仕事でC++もやったことあります。
が、
MSDNを見てもSTLの事がよく分かりませんでした。

オレってアフォですか?

917 名前:デフォルトの名無しさん :03/09/03 00:20
???

918 名前:デフォルトの名無しさん :03/09/03 00:24
全角スペースを文字列から取り除きたい
のですが、どうすれば良いでしょうか?
半角スペースなら認識するんですが、
全角スペースの表現の仕方がわかりませぬ・・・

919 名前:デフォルトの名無しさん :03/09/03 00:26
あんたが読んだのがいつのMSDNか知らんが、
VC++6.0付属のはSTLがらみの説明は最悪だった気がするが。
特にalgorithm

920 名前:デフォルトの名無しさん :03/09/03 00:30
>>919
まさにVC6.0のMSDNです。
で、インターネットで個人が解説してるサイト見たけど
やっぱり難しかった。。。

921 名前:デフォルトの名無しさん :03/09/03 00:34
なんで素直に本を読まないんだ

922 名前:デフォルトの名無しさん :03/09/03 00:41
<algorithm> はなんかヘタに解説書かれるより、
実装をそのまんま載せてくれた方がわかりやすい気がするなぁ。

923 名前:デフォルトの名無しさん :03/09/03 00:48
ttp://www.cc.nao.ac.jp/fsunman/japanese/C++/
kokoosusume

924 名前:デフォルトの名無しさん :03/09/03 01:01
>>918
' '

925 名前:デフォルトの名無しさん :03/09/03 01:04
>>923
おぉ!!ナイスだ!!



926 名前:デフォルトの名無しさん :03/09/03 03:56
>>918

#include <windows.h>
#include <string>
#include <vector>
#include <algorithm>
#include <locale>
int main()
{
    using namespace std;

    locale::global(locale("japanese"));
    wstring ws(L"プ ロ グ ラ ミ ン グ !");
    ws.erase(remove(ws.begin(),ws.end(),L' '),ws.end());
    vector<char> cbuf(256);
    wcstombs(&cbuf[0],ws.c_str(),cbuf.size());
    MessageBox(0,&cbuf[0],"Program Test!",MB_OK);
    return 0;
}


927 名前:35 :03/09/03 09:35
お、まだ反応がある...
>>915 さん、それも考えたんですが、 deleteの方が問題で..
それって別々の deleteが呼ばれるようになるんですかねえ??


928 名前:918 :03/09/03 10:24
>>926

ご教示ありがとうございました。


929 名前:デフォルトの名無しさん :03/09/03 11:38
ヘッダファイルの諸々について教えてくださった方々、ありがとうございました。

930 名前:デフォルトの名無しさん :03/09/03 11:40
Cスレから移動。
>C++のソースをCにするようなのを探します。
>Cfrontなる物が、それっぽいとわかったんですが
>現行Cfront (C++ 3.0.3)を購入して使えば実現できるんですかね?
>または他の方法があれば教えてください。

問い合わせた結果をメモっとこう。
The Cfront 3.0.3 is a translator that converts C++ code to C.
However, it is an old technology that pre-dates Linux.
The code that we furnish is in source with several reference binaries.
This is a "dead" product, that is, we do not provide any support.
We provide it primarily for those who have used it in the past and
wish to port it to a newer platform, or for those interested in the computer
science aspects of the original code that Stroustrup wrote.

931 名前:デフォルトの名無しさん :03/09/03 12:24
C++ translatorについては、このスレに出てたぞ。
Comeau C++なんかで落ち着いたはず。有料だけど

932 名前:デフォルトの名無しさん :03/09/03 13:03
C++プログラミングの落とし穴
↑コレ読んだ人いる?
どうだった?

933 名前:デフォルトの名無しさん :03/09/03 14:47
>>932
それ自体が落とし穴

934 名前:デフォルトの名無しさん :03/09/03 16:27
>927
void *operator new(int size, int type)
{if( type == 1 ){
void* ptr = malloc_1(size+1); (char*)ptr=type;
return (void*)((char*)(ptr)+1);
}if(type == 2 ){
void *ptr = malloc_2(size+1); (char*)ptr=type;
return (void*)((char*)(ptr)+1);
}...
operator delete(void *ptr)
{ if( ((char*)ptr)[-1] == 1 ) free_1(ptr);
else if ((char*)ptr)[-1] == 2 ) free_2(ptr); }

みたいな仕掛けを用意すればよろしい。

935 名前:35 :03/09/04 00:50
なるほど、1byte無駄になりますがほしい機能は
実現できますな。
実はもう書き換えちゃった後だったりするんだけど
その方法でもできないか暇ができたら試してみます。



936 名前:デフォルトの名無しさん :03/09/04 01:44
普通のdeleteでたまたま先頭バイトが重なってしまった場合はいかがするのか?

937 名前:デフォルトの名無しさん :03/09/04 01:45
ptr[-1]も読めない可能性はあるし

938 名前:デフォルトの名無しさん :03/09/04 02:08
アライメントも考えないようなプログラムは組むなよ

939 名前:デフォルトの名無しさん :03/09/04 02:11
ノーマルnewも自分で再定義すれば良い

・・・が、汚いな。

940 名前:35 :03/09/04 02:32
普通の deleteはもうなくなっちゃうからいいのです、今回は >>936
という答えでいいのかしらん。
あと、memory 管理も今回は結構のぞけるので、alloc した chunkの
最後の byteに情報をおけば alignmentも心配ないし。
あ、そもそも addressみればどっちの memory領域からぶんどってきたかも
わかるかな... そうすれば 1byteもいらんな...


941 名前:デフォルトの名無しさん :03/09/04 03:03
普遍的に実装しようと思うと難しげだな。

ところで、
> void *operator new ( size_t Size , int lib);
> #define new new(1)
これの意味がわからないのだが、
たとえば普通に
int* p=new int[4];
とやるときに、
int* p=new(1) int[4];
に置き換えられるということだよね?
その場合Sizeとlibにはそれぞれどの引数がとられるの?

942 名前:デフォルトの名無しさん :03/09/04 04:19
>941
5.3.4.12
-new(2,f) T[5] result in a call of operator new[](sizeof(T)*5+y, 2, f)

943 名前:デフォルトの名無しさん :03/09/04 09:11
>>942
どこに書いてあるの?yって何?

944 名前:デフォルトの名無しさん :03/09/04 09:14
>>943
http://www.kuzbass.ru/docs/isocpp/
または規格書。

945 名前:デフォルトの名無しさん :03/09/04 09:45
>>944
さんきゅ、わかりやすい説明で理解できました

946 名前:デフォルトの名無しさん :03/09/04 12:19
__gcってMicrosoft 仕様?それともStandard 仕様なの?
Visual Studio って独自の拡張してるからよくわからないよ。


947 名前:デフォルトの名無しさん :03/09/04 12:32
>>946
それなに?

948 名前:デフォルトの名無しさん :03/09/04 12:33
Managed C++?

949 名前:デフォルトの名無しさん :03/09/04 12:38
>>946
'__'と'pragma'は処理系拡張のしるし。

950 名前:デフォルトの名無しさん :03/09/04 12:53
>>946
.NETはC++よりC#の方がええよ。
俺はテンプレートのあるC++が好きやけど。
>>947
ガベージコレクション

951 名前:デフォルトの名無しさん :03/09/04 13:54
('__')

952 名前:デフォルトの名無しさん :03/09/04 20:57
>>949
__cplusplus

953 名前:デフォルトの名無しさん :03/09/04 22:03
おしえて!

newしたときのメモリサイズってどうなるんですか?

私はC使いなんですが、Cの場合必ずサイズを指定するけど、
newってサイズ指定がありませんよね?

内部的にはどうなってるんだろ・・・

あと、operator newってなんでoperator new( size_t size)とか定義されているの?
このサイズって何?

newを再定義したら、

Unko* unko = new Unko( 100 );
とかやんないとだめなん?


954 名前:葉月 :03/09/04 22:13
__inLine っていうのがよくわかりません。
誰かおしえてください。

955 名前:デフォルトの名無しさん :03/09/04 22:24
>>953
 new TypeName
って書いてあると、コンパイラがこれは
 (TypeName*) operator new( sizeof(TypeName) + α )
だと思ってコンパイルする。operator new が再定義されてても
関係なく↑こうなるので、再定義したnewの size_t にも
コンパイラが良きに計らった値が自動で入ってくると思っていい。

>>954
多分、その関数をインライン展開できたらしてね、というコンパイラへのお願い。
つーか __ (下線2本) で始まるのは処理系依存の機能だ。
何のコンパイラ使ってるかくらいは書くべし。

956 名前:デフォルトの名無しさん :03/09/04 22:26
gccがC++実装したときから使ってるんだけど・・・Winはほとんど人様の
作ったアプリを使わせていただく環境だと思ってたので、
Visual C++の解説本読んでも知らないことがいっぱい出てきてびっくり。
プログラマじゃないので最新仕様追っかけてなかったから浦島太郎状態。
うーん、スタンダードの追加仕様なのか、MSの仕様なのかわからない。
C#にするわけにはいかないのよ。C++で書いてきたコードが膨大で・・・

957 名前:ぼるじょあ ◆ySd1dMH5Gk :03/09/04 22:28
>>953
(・3・) エェー サイズは指定される型によって自動的に決定されるんじゃないNO?
例えば new int なら sizeof(int) の分だけメモリが確保されるんだYO 多分

958 名前:デフォルトの名無しさん :03/09/04 22:47
>>955
__cplusplus

959 名前:デフォルトの名無しさん :03/09/04 23:08
ツールを開始できません。
この操作を正しく終了しました。
ツールを開始できません。
'vcspawn.exe' 実行時のエラーです。 ビルドを実行できませんでした。

というエラーが出てコンパイルできません。
解決方法を教えてください

960 名前:デフォルトの名無しさん :03/09/04 23:19
>>959
すれ違い

961 名前:デフォルトの名無しさん :03/09/04 23:28
>>957
sizeof(int)以上なのは確実だが、== sizeof(int)とは限らない。

962 名前:デフォルトの名無しさん :03/09/04 23:31
そろそろ次スレよろ

963 名前:デフォルトの名無しさん :03/09/04 23:34
#define private public
#define protected public

964 名前:葉月 :03/09/05 00:07
>>955
ありがとうございます。
コンパイラは VC++ です。
「インライン展開」と「処理系依存の機能」というのはなんですか?

965 名前:デフォルトの名無しさん :03/09/05 00:14
>>963
だから?

966 名前:デフォルトの名無しさん :03/09/05 00:18
>>964
http://www.google.co.jp/
という素敵なサイトがあるので是非。

967 名前:葉月 :03/09/05 00:26
>>966
それはどこに住んでるのと聞かれた時、地球と答えてるのと同じです。

968 名前:デフォルトの名無しさん :03/09/05 00:37
>>967
僭越ながら、そのたとえは違うかと。
「これについてしってる?」と聞かれたとき、「図書館で探せば」と答えているのと同じです

要するに的を射ている回答だと

969 名前:デフォルトの名無しさん :03/09/05 00:39
>>967
住所録を渡しているものと思われ。

970 名前:デフォルトの名無しさん :03/09/05 00:41
質問はどこで調べればいいのかを聞いているのではないから
的を射ていないのは明らかだ。

971 名前:デフォルトの名無しさん :03/09/05 00:43
そんなことより次スレ

972 名前:デフォルトの名無しさん :03/09/05 00:44
逃げてぇー、早く逃げてぇー

973 名前:デフォルトの名無しさん :03/09/05 00:46
まぁ答えてもいいけど、954には理解してもらえないかも。

インライン展開は関数呼び出しのオーバーヘッドを無くす代わりにサイズが大きくなる
処理系依存の機能というのは一般に処理系に依存した機能全体をさす。

974 名前:デフォルトの名無しさん :03/09/05 00:47
>>972
懐かしいな

975 名前:デフォルトの名無しさん :03/09/05 00:49
>>974
元ネタは?

976 名前:デフォルトの名無しさん :03/09/05 00:51
http://pc2.2ch.net/test/read.cgi/tech/1062690663/

じすれ

977 名前:デフォルトの名無しさん :03/09/05 00:54
>>976


978 名前:デフォルトの名無しさん :03/09/05 02:04
梅梅

979 名前:デフォルトの名無しさん :03/09/05 07:44
メモリの再利用について、その考え方や簡単なコード等を
教えていただけないでしょうか?

もしくは、参考となるようなサイトがあれば、教えていただきたいのですが・・・・
おねがいいたします。



980 名前:デフォルトの名無しさん :03/09/05 07:52
>>979
new で確保したメモリはdeleteするまで
開放されません。お好きなように利用して下さい。






ってことじゃないよな…

981 名前:葉月 :03/09/05 08:18
>>前スレの973
ありがとうございます。
>インライン展開は関数呼び出しのオーバーヘッドを無くす代わりにサイズが大きくなる
これは、ソース上、関数風な呼び出しを使用しているけど、
コンパイル時に、呼び出し元の関数内にinLineの内容が記述されているというようにあつかうということですか?

#define UNIUNI(i) ++i

みたいなのと似たようなものですか?

982 名前:デフォルトの名無しさん :03/09/05 08:25
>>981
似たようなものです。

その例だと、
inline int& uniuni(int& i){ return ++i; }
が(intに限って)同等(になり得る)。

これ以上はgoogleなり、入門書なりで調べれ。

983 名前:デフォルトの名無しさん :03/09/05 13:10
> >>前スレの973

随分と亀レスだなおい!

984 名前:デフォルトの名無しさん :03/09/05 14:29
C++のbool型メンバ変数は初期化される仕様ですか?
コンパイラ依存の話でなくて、C++言語の規定として。

985 名前:デフォルトの名無しさん :03/09/05 14:33
C++,C#,Cと綺麗にスレッドが並んだな。

986 名前:デフォルトの名無しさん :03/09/05 16:14
組み込み型のメンバ変数のデフォルトコンストラクタは自動では呼ばれない。

987 名前:デフォルトの名無しさん :03/09/05 16:32
指定したディレクトリ内にあるファイル名をすべて取得する
関数はありませんか?

988 名前:デフォルトの名無しさん :03/09/05 16:34
メンバ変数にデフォルトコンストラクタなんてあるのか?

989 名前:デフォルトの名無しさん :03/09/05 16:38
>>987
無い。自分で作れ。

990 名前:デフォルトの名無しさん :03/09/05 16:38
990げと

991 名前:991 :03/09/05 16:39
ほーたーるの

992 名前:デフォルトの名無しさん :03/09/05 16:40
>>987
C++標準ライブラリの中にはない。
boostならfilesystemあたり。
その他Win32API等の環境依存ライブラリには当然ある。

>>988
全ての組み込み型に0で初期化するデフォルトコンストラクタがある。

993 名前:992 :03/09/05 16:40
ひーかーぁり 

994 名前:デフォルトの名無しさん :03/09/05 16:44
>>992
>全ての組み込み型に0で初期化するデフォルトコンストラクタがある

ほんとに?

995 名前:デフォルトの名無しさん :03/09/05 16:44
>自動では呼ばれない。
ってどゆこと?

996 名前:デフォルトの名無しさん :03/09/05 16:46
1000!

997 名前:デフォルトの名無しさん :03/09/05 16:47
ずさーーーーーーーーっ

998 名前:デフォルトの名無しさん :03/09/05 16:49
げと

999 名前:デフォルトの名無しさん :03/09/05 16:53
うめうめうめうめうめれんじゃーーー

1000 名前:デフォルトの名無しさん :03/09/05 16:53
1000get

ところで、>>322について誰か知りませんか?


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.