C++相談室 part75at TECH
C++相談室 part75 - 暇つぶし2ch1:デフォルトの名無しさん
09/11/28 16:27:38
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part74
スレリンク(tech板)

2:デフォルトの名無しさん
09/11/28 16:33:06
最近のマシンはメモリが安価で優秀なのでSTLで実行ファイルの大きさが10倍になっても特に問題ありません。

3:デフォルトの名無しさん
09/11/28 16:34:17
■基本■
[C++ FAQ]
 URLリンク(www.parashift.com)
 URLリンク(www.bohyoh.com) (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 URLリンク(www.cppreference.com) (英語)
 URLリンク(www.cppll.jp) (↑の日本語訳だけど最新は反映していない)
[禿 Stroustrup]
 URLリンク(public.research.att.com)
[C++ International Standard]
 URLリンク(www.iso.org)
[JTC1/SC22/WG21 - C++]
 URLリンク(www.open-std.org)
  ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。
[JIS X3014]
 URLリンク(www.jisc.go.jp)
  ISO規格の日本語訳。JIS X 3014:2003はISO/IEC 14882:2003 (E)に対応。

4:デフォルトの名無しさん
09/11/28 16:35:27
■Books■
amazon.com C,C++関連書籍
 URLリンク(www.amazon.com)

The C++ Programming Language
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
C++ Primer (3rd Edition)
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
The C++ Standard Library
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
Effective C++
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
More Effective C++
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
Exceptional C++
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
More Exceptional C++
 URLリンク(www.amazon.com)
Exceptional C++ Style
 URLリンク(www.amazon.com)


5:デフォルトの名無しさん
09/11/28 16:36:20
■Books(Templateまわり)■
Effective STL
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
Modern C++ Design
 URLリンク(www.amazon.com)
 URLリンク(www.amazon.co.jp) (翻訳)
C++ Templates
 URLリンク(www.amazon.com)
C++ Template Metaprogramming
 URLリンク(www.amazon.com)


6:デフォルトの名無しさん
09/11/28 16:37:13
■Libraries■
[Boost]
 Boost URLリンク(www.boost.org)
 (日本語) URLリンク(www.kmonos.net)
 (日本語) URLリンク(shinh.skr.jp)
[標準ライブラリ]
 SGI-STL URLリンク(www.sgi.com)
 STLport URLリンク(stlport.sourceforge.net)
 GNU libstdc++ URLリンク(gcc.gnu.org)
 Apache C++ Standard Library (STDCXX) URLリンク(stdcxx.apache.org)
 STLFilt URLリンク(www.bdsoft.com)
 (日本語) URLリンク(episteme.wankuma.com) (※1999年発行注意)
[Loki]
 URLリンク(sourceforge.net)
 LokiPort-MSVC6sp5 URLリンク(fara.cs.uni-potsdam.de)



7:デフォルトの名無しさん
09/11/28 16:38:08
 codepad
 URLリンク(codepad.org)

長いソースを貼るときはここへ!



8:3-7
09/11/28 16:41:48
>>1
スレ建てしてくれたのはうれしいけど
ご自分でテンプレまで貼ってくれると
もっとみんなが幸せに。



9:デフォルトの名無しさん
09/11/28 16:44:12
new禁止ってこれで完璧?

#include <cstddef>

class Foo
{
static void *operator new (std::size_t size)
{
return ::operator new (size);
}
};

int main(void)
{
// Foo *foo(new Foo);

return 0;
}

10:デフォルトの名無しさん
09/11/28 16:55:00
throw() があるとpaafekuto

11:デフォルトの名無しさん
09/11/28 17:01:08
 URLリンク(codepad.org)

このコードにて
20行目と21行目が、どうしてClassDと表示されないのですか?

12:デフォルトの名無しさん
09/11/28 17:15:32
>>11を調べていたら、こんなの見つけた。
関係ないだろうけど面白かった。
////////////////////////////////////////////////////////
CやC++において、演算子の結合は、優先順位ではなく(各々の標準規格での)文法によって定められている。
このため、微妙な差異が生じる場合がある。たとえば、Cの条件演算子は以下のように定義されている。

logical-OR-expression ? expression : conditional-expression
一方、C++では次のように定義されている。

logical-or-expression ? expression : assignment-expression
そのため、

e = a ? b : c = d
という式は、Cだと

e = ((a ? b : c) = d)
と解釈されて条件演算子の結果が左辺値でないことによるエラーとなるが、C++だと

e = (a ? b : (c = d))
と解釈され、正しい式となる。


13:デフォルトの名無しさん
09/11/28 17:16:39
条件演算子(?:)って同じ型しか返せないんじゃなかったかな。
だから classD も classB に暗黙に変換される。

14:デフォルトの名無しさん
09/11/28 17:16:40
あとJIS的には条件演算子じゃなくて
二択条件演算子
っていうんだね。

15:デフォルトの名無しさん
09/11/28 17:24:11
>>10
::operator newってbad_allocをthrowしないの?知らなかったじぇ

16:11
09/11/28 17:25:12
ありがとうございます。
 URLリンク(codepad.org)
こうしてみたらClassYが多くなりました。
現在JIS規格を眺めておりますが
複雑な事が書かれています。



17:デフォルトの名無しさん
09/11/28 17:28:23
地鎮祭

STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

18:11
09/11/28 17:40:21
 URLリンク(codepad.org)
両方を暗黙の型変換可能にするとコンパイルエラーになるようですね。


19:デフォルトの名無しさん
09/11/28 18:19:38
次のコードが
VC++, Digital Mars C++でコンパイルエラーとなります。
g++. bcc 5.5.1, Comeau C++ではコンパイルエラーとはなりません。
 URLリンク(codepad.org)

VC++, Digital Mars C++のバグと言うことでしょうか?


20:デフォルトの名無しさん
09/11/28 18:36:40
そうですよ

21:デフォルトの名無しさん
09/11/28 18:51:11
かもね

22:デフォルトの名無しさん
09/11/28 18:51:20
  ∧_∧
 ( ´∀`)
 (    )
 | |  |
 (__)_)

23:デフォルトの名無しさん
09/11/28 18:52:43
すいません。enumで定義した定数を使ってfor文を回したいんですけどどうしたらいいですか。
enum SOME_IDX
{

24:デフォルトの名無しさん
09/11/28 18:54:14
すいません。enumで定義した定数を使ってfor文を回したいんですけどどうしたらいいですか。
enum SOME_IDX
{
  AAA,
  BBB,
(続く)
  ZZZ,
  SOME_IDX_NUM
};
このようになっていて、
for(SOME_IDX idx=0; idx<SOME_IDX_NUM; idx++){

25:デフォルトの名無しさん
09/11/28 18:54:59
すいません。enumで定義した定数を使ってfor文を回したいんですけどどうしたらいいですか。
enum SOME_IDX
{
  AAA,
  BBB,
(続く)
  ZZZ,
  SOME_IDX_NUM
};
このようになっていて、
for(SOME_IDX idx=0; idx<SOME_IDX_NUM; idx++){
  func(idx);
}
というようなことをやりたいんですが。

26:デフォルトの名無しさん
09/11/28 18:57:57
for(SOME_IDX idx=AAA; idx<SOME_IDX_NUM; idx++){
  func(idx);
}

27:デフォルトの名無しさん
09/11/28 18:58:00
ちょっと頭悪すぎますね?

28:デフォルトの名無しさん
09/11/28 18:58:40
なんだと

29:デフォルトの名無しさん
09/11/28 18:59:48
++がコンパイルエラーになります

30:デフォルトの名無しさん
09/11/28 19:02:53
for(int idx=AAA; idx<SOME_IDX_NUM; idx++){
  func(idx);
}

31:デフォルトの名無しさん
09/11/28 19:04:20
funcの引数の型がIDXなので変換できないと怒られます

32:デフォルトの名無しさん
09/11/28 19:05:29
static_cast<IDX>(idx)

33:デフォルトの名無しさん
09/11/28 19:07:04
質問が糞過ぎて釣りだと思ってた

34:デフォルトの名無しさん
09/11/28 19:08:18
答える側も釣ってるんだと思ってた

35:デフォルトの名無しさん
09/11/28 19:08:21
できますたありがとうございました。

36:デフォルトの名無しさん
09/11/28 19:09:09
oprator++を定義する

37:デフォルトの名無しさん
09/11/28 19:11:10
1発で答えられてねえし

38:デフォルトの名無しさん
09/11/28 19:22:26
C++0xをVSが取り入れるのはいつですか

39:19
09/11/28 19:22:35
やっぱりバグですか…。
VC++で、どうすればこれを回避できますでしょうか?


40:デフォルトの名無しさん
09/11/28 19:24:42
>>38
C++0xはまだ出来上がってないから、当然まだ取り入れられることもないだろ。


41:デフォルトの名無しさん
09/11/28 19:28:48
VS2010で完全じゃないけど一部の機能が取り入れられるよ

42:デフォルトの名無しさん
09/11/28 19:35:26
>>19
return flag ? MyString(hoge.value) : (flag ? hoge : MyString(hoge.value));と書くのはだめなの?

43:19
09/11/28 19:37:42
>>42
ありがとうございます。
なるほどcastで解決するのですね。


44:デフォルトの名無しさん
09/11/28 19:47:29
C++の余命を教えてください(>_<)
まじめな質問してごめんなさい(>_<)

45:デフォルトの名無しさん
09/11/28 19:49:16
1000 名前:デフォルトの名無しさん[sage] 投稿日:2009/11/28(土) 17:09:20
1000なら3年後までにC++衰退

46:デフォルトの名無しさん
09/11/28 20:05:19
呪術はお呼びじゃねえよ

47:デフォルトの名無しさん
09/11/28 20:10:02
C++03が衰退するのは間違いない

48:デフォルトの名無しさん
09/11/28 20:13:34
またコーディング規約に禁止事項が増えるのか

49:デフォルトの名無しさん
09/11/28 20:28:03
コーディングが禁止される禁治産者が増えるの間違いだろう

50:デフォルトの名無しさん
09/11/28 20:54:13
教えてくれてありがとうございます(>_<)
それでは皆さん、何時もの様にクダラナイ質問をどうぞ(>_<)


51:デフォルトの名無しさん
09/11/28 21:03:45
よくわからんけどC++03xはC99と同じでコンパイラメーカーが
無視する可能性はある

C++98/2003で作られたプログラムが多いからだ

52:デフォルトの名無しさん
09/11/28 21:18:36
(>_<) これつかうやつは女が多い
ありがとうございました!! と小文字の!を2度使うやつも

53:デフォルトの名無しさん
09/11/28 21:20:55
そりゃC++03xは無視だろさ
C++0xに関してはVC++とGCCはサポートするのが既定路線

54:デフォルトの名無しさん
09/11/28 22:57:13
 URLリンク(codepad.org)
これですが、手元で自分で
 g++ ソースファイル.cpp -O0
として実行しても
 ClassY()デフォルトコンストラクタ
 ClassX()デフォルトコンストラクタ
 /////////以下foo()/////////
 ClassX()デフォルトコンストラクタ
 ClassY(const ClassX&)コンストラクタ
と表示されるだけで、両方とも最後のコピーコンストラクタが
実行されません。

この違いはどこから来ているのでしょうか?
また、codepadと手元のg++はどちらが正しい挙動ですか?


55:デフォルトの名無しさん
09/11/28 23:06:31
>>54
そのコピーコンストラクタの呼び出しは省略可能。

12.8 Copying class objects p15
> When certain criteria are met, an implementation is allowed to omit the copy
> construction of a class object, even if the copy constructor and/or destructor
> for the object have side effects. ...

56:デフォルトの名無しさん
09/11/28 23:16:42
>>55
ありがとうございます。
> 一定の条件が満たされれば
> たとえコピーコンストラクタやデストラクタが副作用を持っていたとしても
> 省略可能
なんですね。

URLリンク(codepad.org)
このように15行目だけstatic_castを付けて変えたのですが
これも同様の理由で省略されたと考えられるのですね。
ありがとうございました。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch