トップページ⇒tech
1001コメント277KB

C++相談室 part36

レス数が1000を超えています。これ以上書き込みはできません。
0001v(^・^)vNGNG
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。

過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0002v(^・^)vNGNG
1 http://mimizun.mine.nu:81/2chlog/tech/piza.2ch.net/tech/kako/980/980175292.html
2 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html
0003v(^・^)vNGNG
16 http://pc5.2ch.net/tech/kako/1045/10457/1045746245.html
17 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/
31 http://pc5.2ch.net/test/read.cgi/tech/1086185282/
32 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/
34 http://pc5.2ch.net/test/read.cgi/tech/1092018643/
35 http://pc5.2ch.net/test/read.cgi/tech/1093958200/
0004デフォルトの名無しさんNGNG
4様
0005v(^・^)vNGNG
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

[禿 Stroustrup]
 http://www.research.att.com/~bs/
[C++ International Standard]
 http://www.kuzbass.ru/docs/isocpp/
 http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
 http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)
0006v(^・^)vNGNG
■Books■
amazon.com C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
 http://www.amazon.com/exec/obidos/ASIN/0201760428/
0007v(^・^)vNGNG
■Books(Templateまわり)■
Effective STL
 http://www.amazon.com/exec/obidos/ASIN/0201749629/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
 http://www.amazon.com/exec/obidos/ASIN/0201704315/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
 http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
 http://www.amazon.com/exec/obidos/ASIN/0321227255/
0008v(^・^)vNGNG
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[STL]
 STLport http://www.stlport.org/
 SGI-STL http://www.sgi.com/tech/stl/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
 (日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
 http://www.moderncppdesign.com/
 LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
[他]
 ACE http://www.cs.wustl.edu/~schmidt/
 Blitz++ http://www.oonumerics.org/blitz/
 flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
 http://www.trumphurst.com/cpplibs/cpplibs.phtml
 (日本語) http://www.kmonos.net/alang/cpp/lib.html
0009v(^・^)vNGNG
■関連スレ■
【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/
ぼるじょあがC/C++の宿題を片づけますYO! 31代目
http://pc5.2ch.net/test/read.cgi/tech/1095075678/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc5.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
ATL/WTL Part3
http://pc5.2ch.net/test/read.cgi/tech/1095442366/
0010v(^・^)vNGNG
■コンパイラスレ■
フリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/
GCCについて part4
http://pc5.2ch.net/test/read.cgi/tech/1090062751/
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/
OpenWatcom C++
http://pc5.2ch.net/test/read.cgi/tech/1033433728/
"Code of the Nerds" Digital Mars C/C++
http://pc5.2ch.net/test/read.cgi/tech/1044210976/
0011デフォルトの名無しさんNGNG
C++プログラミング入門(オライリー)の書評探してるんですが全然見つかりません。
薄くてよさげなんですがどうなんでしょう?
0012v(^・^)vNGNG
■開発環境スレ■
★初心者にVisual C++を教えるスレ★ Part14
http://pc5.2ch.net/test/read.cgi/tech/1093672937/
■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/
C++Builder相談室 Part11
http://pc5.2ch.net/test/read.cgi/tech/1094749339/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/
0013v(^・^)vNGNG
テンプレ差分
・[JTC1/SC22/WG21 - C++]のURLを移転に対応して変更
・Books に「Exceptional C++ Style」を追加
・Books に「C++ Template Metaprogramming」を追加
・Books が行多すぎになったので、Templateまわりを分けた
・shinichiro.h さんの boost info 移転のお知らせに従いURL変更
・k.inaba さんの Let's boost のほうが情報が新しいので順番を変更
・宿題スレ追尾
・ATL/WTLスレ追尾(統合)
・COMスレ削除
・フリーコンパイラスレ追尾
・GCCスレ追尾
・Borland C++スレ追尾
・Visual C++スレ追尾
・C++Builderスレ追尾
0014v(^・^)vNGNG
テンプレ終了です。
0015v(^・^)vNGNG
STLつかうと一気に実行ファイルサイズが10倍に?!
0016v(^・^)vNGNG
>>11
貴様、>>6が目に入らぬのですか?
0017v(^・^)vNGNG
>>15
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0018v(^・^)vNGNG
>>17
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0019v(^・^)vNGNG
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
0020v(^・^)vNGNG
>>19
#include <stdafx.h>

後死ね。
0021デフォルトの名無しさんNGNG
>>20
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0022デフォルトの名無しさんNGNG
>>1
乙。
002311NGNG
>>16
amazonは当然みたけど、それ以外じゃまったくない。
この本は人気がないんですか?
Cでは言語プログラミングくらいのことができるんだが、
OOPはrubyで本みながら、簡単なスクリプトがかける程度。
そんな漏れにこの本は最適なのかが知りたいのです。
0024デフォルトの名無しさんNGNG
Unicodeの「:」をwcoutで表示することができないのですが、
なぜなのでしょうか? (VC71,WinXP)

(1)ShiftJis(cp932)で以下のソースを保存してコンパイルすると
->前者を実行すると何も表示されず、さらに後者も表示されません。
->でも、後者のみの時は表示が可能でした。
(2)Unicode(cp65001,シグニチャなし)だと
->「error C2001: 定数が 2 行目に続いています。」、
->「error C2143: 構文エラー : ';' が '}' の前にありません。」
-> とでてコンパイルできない

#include<iostream>
int main()
{
std::wcout << L":" << std::endl;// 何も表示されないで止まる?
std::wcout << ":" << std::endl; //: 何故か単独なら表示される
}
0025デフォルトの名無しさんNGNG
行列計算用のライブラリで計算速度が速く使いやすいおすすめのものがあれば
紹介していただけないでしょうか?
002624NGNG
std::wcout.imbue(std::locale("japanese"));
を加えたらうまくいきました。
(結果)
:
F
002724NGNG
":"をUnicodeに変換したものとL":"が
一致しないのが原因みたいでした。
なぜこんなことに....

size_t s_len = mbstowcs(NULL,":",0); //2
size_t w_len = wcslen(L":"); //1
002827NGNG
cのロケール設定し忘れてた...orz
setlocale(LC_ALL,"Japanese");//これがあれば一致した
原因はロケールの設定してなかったからですね。(お騒がせしました,,

0029デフォルトの名無しさんNGNG
>>25
Blitz++
boost::ublas
lapack
0030デフォルトの名無しさんNGNG
>>28
ここのスレには関係ない話なのであまり伸ばしたくないのですが
vc7.1ってlocaleをいちいち設定しなくても勝手にやってくれるのではなかったっけ。あれ?
すくなくても、俺はlocaleなんて設定しなくてもうまく表示してくれる。
もしかして、versionの違いかも。
0031デフォルトの名無しさんNGNG
STL周りは明らかにオブジェクト指向というより
関数型プログラミングの臭いがする。
そのへんのカオスつーかハイブリッド具合がC++っぽいんだろうけど。
0032デフォルトの名無しさんNGNG
なにこのコピペ━━━(゚∀゚)━━━ !!!
0033デフォルトの名無しさんNGNG
カオス?
意味わかってんのかな?
多分覚えたの単語を使ってみただけだろうけど・・・
0034デフォルトの名無しさんNGNG
ちなみにケイオスと発音しないと恥ずかしいよ
0035デフォルトの名無しさんNGNG
>>33
「勝利の方程式」みたいなもんでしょ。
0036デフォルトの名無しさんNGNG
指定のディレクトリ以下のファイルを読み込む方法てありますか?
0037デフォルトの名無しさんNGNG
>>36
C++標準機能にはないので、各環境のスレで聞いてください。
0038デフォルトの名無しさんNGNG
>>36
boostで書いてみた.
#include <iostream>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
#include <boost/filesystem/fstream.hpp>
using namespace std;
void show (const boost::filesystem::path &p) {
boost::filesystem::directory_iterator end;
for (boost::filesystem::directory_iterator itr (p); itr != end; ++ itr) {
if (boost::filesystem::is_directory (*itr))
show (*itr);
else {
string filepath (boost::filesystem::complete (*itr).string ());
cout << "#############" << filepath << "#############" << endl;
ifstream ifs (filepath.c_str ()); if (!ifs) exit (1);
string buf;
while (getline (ifs, buf))
cout << buf << endl;
}
}
}
int main () {
show (boost::filesystem::path ("hoge"));
return 0;
}
初めて使ったので慣れてる人からみたら変なとこがあるかもしれないけど,こんな感じで書けますよ.
0039デフォルトの名無しさんNGNG
UTF-16とかってさワイド文字って言うんでしょ?
で、Shit-Jisはマルチバイト文字って言うんでしょ?


じゃ、Asciiって、ワイド文字なの?マルチバイト文字なの?

0040デフォルトの名無しさんNGNG
一応独習C終わったんですが、このままCを深く掘り下げていくのと、
今の早い段階でC++に移行するのだとどっちがいいんでしょうか?
個人的にはオブジェクト指向のC++を使ってみたいような気はするんですが、
Cも理解しきらないうちにC++が理解できるのか不安なんです。
0041デフォルトの名無しさんNGNG
>>40
早めにC++に移れ。Cにしがみついていると嫌な癖がどんどん身に付いて、
後から引きはがすのに苦労するぞ。
0042デフォルトの名無しさんNGNG
Cは文法的な理解だけで十分。
ただし、アルゴリズム的な感覚が身についていない場合はもう少し
Cで勉強してからの方が良い。
他言語を既に習得している場合はそのままC++の習得に移っても良い。
0043デフォルトの名無しさんNGNG
>>40
一年や二年ぐらいで付いた癖なんて直すのは簡単なような気がするけど。俺にはわからない。
でも、早いうちにC++に移行したほうがいいのは確かだな。
もれなく、STLやBOOSTが付いてくるから楽しさ満点。
さらに、WIN32プログラムを組もうと考えたらMFCやWTLをやるにはC++の知識(たいした知識じゃないけど)が必要。
0044デフォルトの名無しさんNGNG
>>28
ロケールを設定したら問題が解決するとも限らないんだろうな。
文字列リテラル→"execution character set" への変換方法は実装依存。
0045デフォルトの名無しさんNGNG
>>42
同意。
プログラムの良い習慣は何言語であろうが変わりはない。
それは C++ とて例外ではないが、必要以上に難しくひねくれたところがあるから、
何と言うか本来なら立ち直れるはずの色々なショックがいちいち問題になりやすい。
0046デフォルトの名無しさんNGNG
プログラミング講義C++
という本に演習とありますが答えが載ってないのでやり方が分かりません。
なのでここに演習の文を書くんでその答えを書いてくださらないでしょうか?

>>2つのオブジェクトa,bが、
>>(1)いずれもint型である場合
>>(2)いずれもdouble型である場合
>>(3)一方がint型で他方がdouble型である場合
>>の3つの場合に対して、sizeof(a+b)を表示するプログラムを作成し、その実行結果を考察せよ。

0047デフォルトの名無しさんNGNG
おことわりです。
0048デフォルトの名無しさんNGNG
>>46
宿題スレにでも行け
0049デフォルトの名無しさんNGNG
これからCプログラミングやる初心者ですが
もう、お店ではC++って売ってないみたいんなんですけど
どうすれば入手できますか?
また、どのメーカーのC++がいいですか?
よろしくおねがいします
0050デフォルトの名無しさんNGNG
class hoge2ch
{
 private:
  int a,b;
 public:
  hoge2ch(int x,int y):a(x),b(y)
 {

 }
・・・・・
};

という表記を、「オブジェクト指向計算力学入門」という本で見つけました
コンストラクタの引数の後ろに、継承でもないのにコロンが付いて
コンストラクタ内の引数が非公開メンバに代入される事を意味するようですが、
こんな表記法を他の書籍で見かけることは出来ませんでした。

この表記法を使っていて、分かりやすく解説している書籍を紹介して下さい
0051デフォルトの名無しさんNGNG
とりあえず、イニシャライザでぐぐっとけ。
それと、この書き方を書いてない本は窓から投げ捨てておくこと。
0052デフォルトの名無しさんNGNG
他の書籍のタイトルをさらしておけ
0053デフォルトの名無しさんNGNG
>>50
いつかは絶対必要になるから買っておくべし
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ref=pd_sr_ec_ir_b/249-7749404-9276354
005450NGNG
>>51-53
教示ありがとうございます
http://plaza.harmonix.ne.jp/~fakira/turedure/cprog_00.htm
代入の仕方で参考になるものをちょっと見つけました
0055デフォルトの名無しさんNGNG
>>50(>>54)
代入じゃねぇ。初期化だ。混同すべからず。
005628NGNG
>>30
ver7.1.3091ですが、やはりないとだめみたい。
C++的には codecvtですかね?
ttp://www.tietew.jp/cppll/archive/568
に例が載ってました。

>>44
そういえばXML以外でエンコーディング指定って見たことない...。
0057デフォルトの名無しさんNGNG
派生クラスでは、どうあがいても関数呼び出しが
仮想関数テーブル経由になってしまうのは避けられないのでしょうか?
高速化の必要から悩んでいます。
0058デフォルトの名無しさんNGNG
>>57
テーブル経由になるのはvirtual指定したメンバ関数だけだよ。
派生クラスは関係ない。
005957NGNG
>>58
おおお!ありがとうございます。
基底でvirtualが指定してある関数の場合は、派生側同名の関数で
例えvirtual指定が無く、かつ派生型ポインタで呼び出しても駄目ですよね?

その場合は同じ振る舞いのメソッドを、派生側で別に用意すればいいのか…。
いや本当に助かりました。
0060デフォルトの名無しさんNGNG
>>59
基底クラスのメンバー関数がprivateで無い限り派生型でそのメンバー関数を呼べるよ
0061デフォルトの名無しさんNGNG
つか仮想関数でもコンパイル時に型が確定してりゃvtblなんか経由しないコンパイラもある。
0062デフォルトの名無しさんNGNG
もしくは基底クラスの関数で派生のメンバー関数を使いたいなら
template<class T>
struct base{ void fun(){ static_cast<T&>(*this).fun(); } };

struct My : public base<My>
{ void fun(){} };
でokのはず。
0063デフォルトの名無しさんNGNG
>>61
そうなのか。でもVC7.1は違うだろうな。
0064デフォルトの名無しさんNGNG
VC7.1でも出来るんじゃないの?
コンパイルタイムで明らかなのであれば
例えばこんなん

class po
{
public:
    virtual void f() = 0;
};

class null : public po{ (ry };

void hoge()
{
    null n;
    n.f();
}
0065デフォルトの名無しさんNGNG
しばしば、「仮想メンバー関数の呼び出しは遅い」
というトピックが提供されるみたいだけど、実際どのくらい遅くなるのでしょうか。
目に見えてパフォーマンスが変わるものなのでしょうか。

実測した人とか居ます?
0066デフォルトの名無しさんNGNG
仮想関数でもinline展開してくれるコンパイラならいいんでは
0067デフォルトの名無しさんNGNG
//main.cpp
#include <stdio.h>
#include <time.h>
#include <typeinfo.h>
struct Virt { virtual int get(); };
struct VirtSub : public Virt { int get();};
struct NonVirt {int get();};
struct NonVirtSub : public NonVirt {int get();};
Virt *virt();
VirtSub *virtsub() ;
NonVirt *nonvirt() ;
NonVirtSub *nonvirtsub() ;
template<class T> void m(T *t) {
clock_t c = clock();
for (int i=0; i<100000000; ++i) t->get();
c = clock() - c;
printf("%s:%u\n", typeid(t).name(), (unsigned)c);
}
int main() {
m(virt());
m((Virt*)virtsub());
m(virtsub());
m(nonvirt());
m((NonVirt*)nonvirtsub());
m(nonvirtsub());
return 0;
}
0068デフォルトの名無しさんNGNG
struct Virt { virtual int get(); };
//impl.cpp
struct VirtSub : public Virt { int get();};
struct NonVirt {int get();};
struct NonVirtSub : public NonVirt {int get();};
int Virt::get() { return 0; }
int VirtSub::get() { return 0; }
int NonVirt::get() { return 0; }
int NonVirtSub::get() { return 0; }
Virt virt_;
VirtSub virtsub_;
NonVirt nonvirt_;
NonVirtSub nonvirtsub_;
Virt *virt() { return &virt_; }
VirtSub *virtsub() { return &virtsub_; }
NonVirt *nonvirt() { return &nonvirt_; }
NonVirtSub *nonvirtsub() { return &nonvirtsub_; }
0069デフォルトの名無しさんNGNG
$cl main.cpp impl.cpp
$./main
struct Virt *:981
struct Virt *:981
struct VirtSub *:1092
struct NonVirt *:751
struct NonVirt *:741
struct NonVirtSub *:731

vs.net2003
winxp sp2
pentium M 1400MHz(1.15GHz?)
0070デフォルトの名無しさんNGNG
仮想関数でパフォーマンス低下に大きく影響を与えるのは
vtable 経由になることではなくインライン展開できないことだと思う。
0071デフォルトの名無しさんNGNG
//おまけ ポインタ経由しないとき

template<class T> void n() {
T t;
clock_t c = clock();
for (int i=0; i<100000000; ++i) t.get();
c = clock() - c;
printf("%s:%u\n", typeid(t).name(), (unsigned)c);
}

n<Virt>();
n<VirtSub>();
n<NonVirt>();
n<NonVirtSub>();

---------
struct Virt:741
struct VirtSub:741
struct NonVirt:741
struct NonVirtSub:741

0072デフォルトの名無しさんNGNG
まあ、他のコストがテーブルの初期化と正しい関数のオフセットへのアクセスだけだからねえ
0073デフォルトの名無しさんNGNG
get()が十分重い関数のときには律速段階にならない罠
007467NGNG
一言でいえばほとんどまったく影響ない
0075デフォルトの名無しさんNGNG
>>67
get()が軽い場合と重い場合で
VirtSub / Virt
NonVirtSub / NonVirt
を算出してみてよ
007675NGNG
>>74
ないってしゅちょうなのね
0077デフォルトの名無しさんNGNG
古い資料だけどここが詳しい?
ttp://gigo.retrogames.com/t_lab/chapter2.html
0078デフォルトの名無しさんNGNG
要するに仮想関数であることを問題にするのは、
他の最適化をやりつくした後でいいってこと?
0079デフォルトの名無しさんNGNG
まずは設計ね
0080デフォルトの名無しさんNGNG
>>75
めどい
0081デフォルトの名無しさんNGNG
教えてください。

VC6.0でダイアログベース+MFC+winsock2で、サーバを作ってます。

で質問なんですが、あるクラスのメンバ関数ってスレッド化する事ができるでしょうか?
つまり、クラス内のメンバ関数ってプログラム内でクラス定義されて初めて
関数のメモリが割り当てられるような気がするんですが、
例えば、
_beginthreadex(0 NULL, Func ・・・
このFuncがメンバ関数の時、そのアドレスがわからないような気がするのですが。

親切な人お願いします。
0082デフォルトの名無しさんNGNG
VC6とVC7で違ってくるのかな?

VC6だと仮想と非仮想に全く違いがなかった。
VC7だと非仮想関数と、ポインタじゃない呼び出しの仮想が同じくらい速くなった。
>>66の指摘している通り、VC7で明示的にインスタンスを作った場合は、テーブルを使わないみたい。

//----ケースA
CHoge* p = new CHoge;
p->VirtualFunc();
//----ケースB
CHoge obj;
obj.VirtualFunc();

このA,Bの2種類では、Bはテーブルを使わないようです。(VC7の場合)
0083デフォルトの名無しさんNGNG
>>81
class c;
namespace{
C* p;
};
class c{
public:
C(){ p = this; }
int f(){ return 0; }
};
int f_stub(){
return p->f();
}

_beginthread( 0, NULL, f_stub, ・・・
0084デフォルトの名無しさんNGNG
ということは VC6の最適化機能は不完全?スタンダード版?
0085デフォルトの名無しさんNGNG
VC++とC++って別物なの?
0086デフォルトの名無しさんNGNG
最適化に完全も不完全もねえだろ
ある意味、ボランティアみたいなものじゃん
0087デフォルトの名無しさんNGNG
>>85
C++は言語名でしょ。
VC++はC++ソースのコンパイル環境。
MicroSoft C/C++コンパイラという意味。
他にはBC++やg++などもある。
0088デフォルトの名無しさんNGNG
>>85
C++ :プログラミング言語
VC++:MicrosoftのC++コンパイラと周辺ツール類の製品名(の略称)
0089デフォルトの名無しさんNGNG
>>86は貧乏でGCCを使おうとしたが難しくて使えなくてBCCで我慢してる
0090デフォルトの名無しさんNGNG
>>82
6も7もおなじだったよ?
0091デフォルトの名無しさんNGNG
誰か、VC6で試してくれないか?
>>82の意外な書き込みが気になる。
0092デフォルトの名無しさんNGNG
あんがと。しかしわかったようなわからんような。
どうやらBACICから始めたほうがよさそうだな。
ポケコンかお
0093デフォルトの名無しさんNGNG
>>92
それはどうかと...
ところでポケコンって今日びまだ売ってんの? いくらくらい?
0094デフォルトの名無しさんNGNG
>>93
結構進化してるよ。
2〜3万くらいじゃない?
0095デフォルトの名無しさんNGNG
PDA使ったらポケコンって用済みじゃない?
手軽にプログラミングするならPCがあるし、PDAでもシリアル出力できるし。
0096デフォルトの名無しさんNGNG
>>81,83

>そのアドレスがわからない
this使う
GUI部にマルチスレッドは危険極まりないと思うよ

メモリ割り当てたいなら
class C{ public: C(){}; unsigned f(void* arg); static unsigned stub(void* p){ return C().f(arg); }};
_beginthread(C::stub,0,arg);
0097デフォルトの名無しさんNGNG
3万あれば自作して(中古じゃないと無理かな?)PC-UNIXがいいような気がする。
0098デフォルトの名無しさんNGNG
>>82 そういう違いは確認できなかった
#include <stdio.h>
#include <time.h>
struct C {virtual int v() { return 0 ;}
int nv() { return 0; }};
int main() {int i;clock_t t;C c, *pc = new C;
printf("ver%d\n", _MSC_VER);
t = clock();
for (i=0; i<100000000; ++i) c.nv();
printf("nonptr-nv:%u\n", clock() - t);
t = clock();
for (i=0; i<100000000; ++i) c.v();
printf("nonptr-v:%u\n", clock() - t);
t = clock();
for (i=0; i<100000000; ++i) pc->nv();
printf("ptr-nv:%u\n", clock() - t);
t = clock();
for (i=0; i<100000000; ++i) pc->v();
printf("ptr-v:%u\n", clock() - t);
return 0;}
-----
[vc6]ver1200
nonptr-nv:771
nonptr-v:771
ptr-nv:781
ptr-v:1242

[vc7]ver1310
nonptr-nv:731
nonptr-v:741
ptr-nv:741
ptr-v:971
0099デフォルトの名無しさんNGNG
デバッガで混合表示したほうが早いと思うが
0100デフォルトの名無しさんNGNG
>>99
medoi
0101デフォルトの名無しさんNGNG
何はともあれVC7が圧勝
0102デフォルトの名無しさんNGNG
>>98
ちょっと>>98のサンプルソースを変更してみた。
違う結果が出ると思うので確認してみてホスイ。
-------------------------------------------
#include <stdio.h>
#include <time.h>
volatile int g_number=0;
struct CBASE {virtual int v()=0; int nv() { g_number++;return 0; }};
struct CDERIVED : public CBASE {virtual int v() { g_number++;return 0 ;}};
int main() {int i;clock_t t;CDERIVED c, *pc = new CDERIVED;
const int rep_cnt=200000000;
printf("ver%d\n", _MSC_VER);
t = clock();
for (i=0; i<rep_cnt; ++i) c.nv();
printf("nonptr-nv:%u\n", clock() - t);
t = clock();
for (i=0; i<rep_cnt; ++i) c.v();
printf("nonptr-v:%u\n", clock() - t);
t = clock();
for (i=0; i<rep_cnt; ++i) pc->nv();
printf("ptr-nv:%u\n", clock() - t);
t = clock();
for (i=0; i<rep_cnt; ++i) pc->v();
printf("ptr-v:%u\n", clock() - t);
return 0;}
-------------------------------------------
0103102NGNG
自分の環境での>>102の結果Pen4 3GHz

ver1200
nonptr-nv:984
nonptr-v:875
ptr-nv:937
ptr-v:938

ver1310
nonptr-nv:546
nonptr-v:532
ptr-nv:547
ptr-v:937
0104デフォルトの名無しさんNGNG
pen M 1400MHz?
かわらねぇ…

ver1200
nonptr-nv:1662
nonptr-v:1622
ptr-nv:1623
ptr-v:2143

ver1310
nonptr-nv:1682
nonptr-v:1742
ptr-nv:1643
ptr-v:2053
010540NGNG
>>41->>43
亀レスでスマソですが、レスどうもです。
まだまだ経験が浅い自分だけではふんぎりが付かなかったので、
非常に参考になりました。では、C++やってみますー。
010636NGNG
>>37
標準でないんですか (´・ω・`)

>>38
ソースまでわざわざありがとうございます。
0107デフォルトの名無しさんNGNG
>>102
AthlonXP3000+
Borland-C++ 5.6.4
nonptr-nv:812
nonptr-v:735
ptr-nv:828
ptr-v:953

ver1310
nonptr-nv:547
nonptr-v:391
ptr-nv:562
ptr-v:734

何かAthlonXP速い。Athlon64で誰かやってみて〜
0108デフォルトの名無しさんNGNG
>106
そもそもディレクトリがない環境っていうのもあるんで。
0109デフォルトの名無しさんNGNG
>>102
これってfor文のコストに関数呼び出しのコストが埋もれてしまっていませんか?
以下,すごく環境依存なコードで申し訳ないですが
VC++&インテルペンティアム互換プロセッサな環境での測定コードを載せておきます.
rdtscはプロセスタイムではなくてプロセッサタイムを計測しているので注意してください.

#include <stdio.h>
#include <time.h>
volatile int g_number=0;
inline __int64 rdtsc(){
__asm{
rdtsc;
}
}
struct CBASE {virtual int v()=0; int nv(){ ++g_number;return 0; }};
struct CDERIVED : public CBASE {virtual int v(){ ++g_number;return 0; }};
int main() {
__int64 t, t2;
CDERIVED c, *pc = new CDERIVED;
printf("ver%d\n", _MSC_VER);
t = rdtsc(); c.nv(); t2 = rdtsc();
printf("nonptr-nv:%u\n", t2 - t);
t = rdtsc(); c.v(); t2 = rdtsc();
printf("nonptr-v:%u\n", t2 - t);
t = rdtsc(); pc->nv(); t2 = rdtsc();
printf("ptr-nv:%u\n", t2 - t);
t = rdtsc(); pc->v(); t2 = rdtsc();
printf("ptr-v:%u\n", clock() - t);
return 0;
}

結果はご自分の目でお確かめください.
0110109NGNG
109に関して補足するまでもないとは思いますが,
このような仮想関数呼び出しのコストが致命的になるのは
コード全体の中でその仮想関数呼び出しがホットスポットになっていて,
なおかつ仮想関数内部の処理が十分軽いときに限られます.
いずれにせよ効率の話なので,この手のことを気にするのは2の次にするべきでしょう.

後,効率の話をするなら99さんの言うように結局はアセンブリを見ないといけないんでしょうね.
0111109NGNG
す,すいません.109の最後のprintfですけれどtypoです.
>printf("ptr-v:%u\n", clock() - t);
printf("ptr-v:%u\n", t2 - t);

恥ずかしいったらありゃしない.
0112デフォルトの名無しさんNGNG
サーバーでデータ処理でもするんじゃなきゃ、呼び出しコストなんぞ考える必要もない時代だよなぁ。
組み込みで8ビットCPUでC++使ってるなら考えないといかんけど。
0113デフォルトの名無しさんNGNG
std::vector<int> a;
std::vector<int>::iterator i;
i = a.begin;
と括弧を書き忘れたのにコンパイルが完了してしまいました
std::vector<int>::iterator i = a.begin;
はエラーとなり、コピーコンストラクタと演算子の違いということは分かるのですが
なぜ代入できるのでしょうか?
0114デフォルトの名無しさんNGNG
コンパイラのバグ。
0115113NGNG
>>114
そうだったのですか。コンパイラを書き忘れていましたがVCのver6でした。
for(のループ変数がスコープをはみ出すので>>113のように書いたところ間違えてしまいました。
完全にはめられていますね。
0116デフォルトの名無しさんNGNG
いい加減VC6は捨てろ
0117デフォルトの名無しさんNGNG
http://support.microsoft.com/default.aspx?scid=fh;JA;lifeDevToolFam
0118デフォルトの名無しさんNGNG
http://msdn.microsoft.com/library/en-us/dnvs05/html/stl-netprimer.asp
STL.NET
0119デフォルトの名無しさんNGNG
プログラムの本質的な意味を理論的に説明してくれる人いませんか?
0120デフォルトの名無しさんNGNG
プログラムの本質的な意味?どういうこと?
0121デフォルトの名無しさんNGNG
>>119
少なくともどういう経緯でその質問が出てきたのか書いてくれんと答えられん。
0122デフォルトの名無しさんNGNG
>>119
ある作業を自分以外へ通知・委託するための行為。
0123デフォルトの名無しさんNGNG
template <typename T>
class c
{
    template <typename U> struct s{ typedef U u; };
public:
    typedef s<T>::u u;
};

を VC7.1 でコンパイルしたところ

error C2146: 構文エラー : ';' が、識別子 'u' の前に必要です。
error C2501: 'c<T>::u' : 識別名を宣言するのに、型が指定されていません。
warning C4346: 'c<T>::s<T>::u' : 依存名は型ではありません。

とエラーが出るのですが、何故でしょうか…
0124デフォルトの名無しさんNGNG
>>123
- typedef s<T>::u u;
+ typedef typename s<T>::u u;
0125デフォルトの名無しさんNGNG
>>124
即レス感謝です
Tに依存することを失念してました、、失礼しました…
0126デフォルトの名無しさんNGNG
とあるクラス Bitmap が、もしかするとデストラクタで例外を投げるかも知れないとき、
auto_ptr< Bitmap > hoge の値をできるだけ安全に変更するためには
 auto_ptr< Bitmap > hoge( new Bitmap("hehe") );
 hoge.reset( new Bitmap("haha") );
ではなく、
 auto_ptr< Bitmap > hoge( new Bitmap("hehe") );
 hoge = :auto_ptr< Bitmap > ( new Bitmap( "haha" ) );
とする必要があるんでしょうか?(前者だとどこにもbindされない Bitmap("haha") がリークする?)
0127デフォルトの名無しさんNGNG
デストラクタが例外を投げるという設計が120%間違ってる
0128デフォルトの名無しさんNGNG
>>127
漏れが設計したクラスではないので・・・
とりあえず release してから reset することにしました。
0129デフォルトの名無しさんNGNG
>>128
俺ならその例外を握りつぶすラッパクラスを作る。
0130デフォルトの名無しさんNGNG
デストラクタが例外を投げてはいけないことはまともな本を
読んだことがあれば必ず書いてあるはずなんだがなぁ…
いまだにそんな設計をする人間がいるのか(_ _;
0131デフォルトの名無しさんNGNG
>>130
その辺は完全に漏れの質問が変でした。
実際には「例外を投げるかもしれないとき」ではなくって、
「OSがサポートしている例外機構がC++例外と類似の例外として投げてくる可能性があるとき」
ということでした(Windows の SEH)。
0132大学生NGNG
「Accelerated C++」でC++の勉強を始めた大学生です。
第11章のプログラムをテストしようとしたところ、
コンパイルはできたのですが、MAKEができません。
エラーメッセージの原因がわからないので誰か助けてください。

エラーメッセージ:
Error: 外部シンボル 'Vec<couple>::create()' が未解決
(D:\CPP\CHAPTER11\DEBUG\KADAI11_0.OBJ が参照)
0133大学生NGNG
「Accelerated C++」でC++の勉強を始めた大学生です。
第11章のプログラムをテストしようとしたところ、
コンパイルはできたのですが、MAKEができません。
エラーメッセージの原因がわからないので誰か助けてください。

エラーメッセージ:
Error: 外部シンボル 'Vec<couple>::create()' が未解決
(D:\CPP\CHAPTER11\DEBUG\KADAI11_0.OBJ が参照)
0134デフォルトの名無しさんNGNG
>>133
で、その本の11章のプログラムはどんな物ですか。
説明不足ですよ。
0135大学生NGNG
すいません二重投稿してしまいました。。。
以下、ソースコードです。

/* Vec.h */
#ifndef GUARD_Vec_h
#define GUARD_Vec_h
template <class T> class Vec {
public:
Vec() { create(); }
(略)
private:
void create();
(略)
};
#endif



/* Vec.cpp */
#include "Vec.h"
template <class T> void Vec<T>::create()
{
(略)
}
(略)
0136大学生NGNG
/* kadai11_0.cpp */
#include "Vec.h"
#include <iostream>
using std::cout;
using std::endl;
struct couple {
int a;
int b;
};
int main()
{
Vec<couple> sVec;
couple s1 = {1, 2};
sVec.push_back(s1);

for (Vec<couple>::size_type i = 0; i != sVec.size(); i++) {
cout << sVec[i].a << endl;
}

return 0;
}
0137デフォルトの名無しさんNGNG
手元にある本がCの本で(まだ読んでない
手元にあるソフトがVC++とVB6.0なんだけど
Cの本を読んでVC++の役に立ちますか?
まったく別物なら素直にVC++の本買おうと思うんだけど
ちょっと貧乏で3週間は買えないから。 
プログラムはまったくした事ないのでパラパラ本を見ても(cとC++の違いが)よくわかりません。
0138デフォルトの名無しさんNGNG
>>137
言っておくけれど、VC++とはMicrosoftのソフトの名前で、言語はC++なのですよ。
だから、本を買うならVC++と書いてある本よりもC++と書いてある本を
買うのがよろしい。
また、C++はCの拡張言語なので、Cを知った上でC++を学ぶのが正当な学習です。
ちなみに、Cを覚えるときの参考書は プログラミング言語C、
C++を覚えるときの参考書は C++ Primer、
がおすすめです。
0139デフォルトの名無しさんNGNG
>>135
それはテンプレートクラスの実装を別ファイルにしているのが原因。
現実的な話、ほぼすべてのコンパイラはそれをサポートしていない。
解決法はヘッダに実装を直接書くしかない。
0140デフォルトの名無しさんNGNG
>>138
詳しくありがとうございました。
Cの本をじっくり読み進めてみます。
0141デフォルトの名無しさんNGNG
>>137
C++を学習するのにCを先に学習せねばならないかは、どちらとも
使える人間の間でも議論のあるところ。俺個人は必要ないと
思っている。それから、VC++を使おうがBCCを使おうがC++を学習
しなければ使いようがない。VC++の本とか言ってVC++という
ものすごく環境依存の本を読むよりも、C++という言語については
その専門書を、VC++という環境についてはその専門書を、別に
読むことをお勧めする、金がなくても。結局はそれが近道。
0142デフォルトの名無しさんNGNG
Cの内容を兼ねたC++の本も多いような気がする。
というか自分がそれに騙された。Cの入門書をただC++に
直しただけの本。
0143大学生NGNG
>>139
どうもありがとうございます。
ヘッダに直接展開したらMAKEできました!
ファイルをまたがってのテンプレートはできないのですね。
勉強になりました。
0144デフォルトの名無しさんNGNG
>>137
Cの勉強は要らないに一票。
あと、書籍代を惜しんでいては勉強は出来んぞ。
どうしても金が無かったら図書館を利用すべし。
政令指定都市クラスならなら公立図書館でも
プログラミング書は結構置いている。
0145デフォルトの名無しさんNGNG
>>139
クラステンプレートね。
0146デフォルトの名無しさんNGNG
Cはの勉強はいらないと言っている奴はたぶん学術的な下積みも無いに違いない。
高卒プログラマかな。
0147デフォルトの名無しさんNGNG
C++やるならC++で勉強すりゃいいよ。
0148デフォルトの名無しさんNGNG
>>137
図書館だったら返さないといけないから忘れた時に調べたい
とき不便。基本的には買う方がいいような気がする。自分は、だけど
実際、あれはどうだったっけって思った時本無いから不便に思った事あるし。
0149デフォルトの名無しさんNGNG
>>148
同意。
しかし最近は結構ウェブで事足りることも多いからなぁ
0150デフォルトの名無しさんNGNG
ここで質問するのもどうかと思うけど
今勉強するべきプログラミング言語ってなにがいいかな?
自分で思うのは
�@JAVA
�AC
�BVB
なんだけど。
0151デフォルトの名無しさんNGNG
アングラ探してPDFをDLしろ。英語版か中文版しかないが。
タイ━━━━||Φ|(|゚|∀|゚|)|Φ||━━━━ホ!?
0152デフォルトの名無しさんNGNG
いまどきCなんかやってクソッタレなCの文字列処理関数とか覚える暇があるんならアセンブラでもやったほうがまだマシだろ。
0153デフォルトの名無しさんNGNG
まさにスレ違いの流れ!
0154デフォルトの名無しさんNGNG
アセンブラって言語?
0155デフォルトの名無しさんNGNG
(1位タイ)C++(もしくはC),C#,JAVA,ActionScript
以降順位なし。

1位をC++(もしくはC),C#,JAVA,ActionScriptでタイとした理由。
・残念ながら現在OSで圧倒的シェアを占めているWindowsにおいて、
 C#がMicrosoftの次世代主要開発言語として位置づけられていること。
・残念ながら(略)、C++/CLIが結構うまく.NET Frameworkを扱えるらしい
 から、膨大な遺産を持っているC++(もしくはC)はこれから勉強するに
 足る長期間生き残るだろうと予想されること。
・Windowsのサーバーサイドのプログラミングは今後.NETを用いたものに
 移行すること。
・その他UNIXやLINUXの環境においてはまだしばらくはC++(もしくはC)が
 開発の主流であり続けるであろうと予想されること。
・Webのクライアントサイドのプログラミングの主流がJAVAとActionScript
 (Flash)であること。

VBは.NETになって、その意義(プログラム初心者がプログラムらしきものを
形だけでも作ることができる)を失っている。C#に置き換えられていくのでは
ないだろうか。
0156デフォルトの名無しさんNGNG
アセンブリ言語をアセンブラでアセンブルしようか。
0157デフォルトの名無しさんNGNG
コンパイラは知ってるぞ。漫画だよな。
アセンブラも知ってるぞ。漫画だよな。

0158デフォルトの名無しさんNGNG
おまいら、これでも実行してろ
E8 FD FF
0159デフォルトの名無しさんNGNG
バイナリエディタを使うんですね
0160デフォルトの名無しさんNGNG
>>146
学術的な下積みって何?
駅弁大学で万年助手すること?
0161デフォルトの名無しさんNGNG
C++できるってことはCもできるんじゃない。
ていうか>>153に同意
0162デフォルトの名無しさんNGNG
スレ違いは分かってて質問するけど(何故ならC++が好きだから)
日本以外に行ったら三文字表記は今でも使われてるのですか。
??=include <iostream>
int main()
??<
int n??(1??)={10};
cout<<"Hello, World??/n"<<n??(0??)<<endl;
return 0;
??>
なんかすごいよね。
0163デフォルトの名無しさんNGNG
あっusing namespace std;が抜けてる
0164デフォルトの名無しさんNGNG
ならCでパターン全部書いてみろと
0165デフォルトの名無しさんNGNG
>>152
こんな風に考えているのが大勢いるんだろうね。
着眼点が下等すぎ。
0166デフォルトの名無しさんNGNG
>>165
釣られんな(w
ユーザライクな文字列処理を必要とする人がアセンブラに走るわけがない。
0167デフォルトの名無しさんNGNG
>152

あの突っこむべきかどうか本当に必死に考えた結果、突っこみます


ここC++のスレです
0168デフォルトの名無しさんNGNG
>>167
なにいってんの?
0169デフォルトの名無しさんNGNG
ここはCwwのスレじゃありません。
0170デフォルトの名無しさんNGNG
派生クラス固有の値を派生元のポインタから仮想関数経由でセットする方法を教えてください。
class A{
public:
 virtual void Initialize( void* )=0;
};

class B : public A{
 BStruct bs;
public:
 virtual void Initialize( void* p){
  bs = *(BStruct*)p;
 }
};
こんな感じで渡しているのですが、中身の保証が全くありません。NULLチェックのみ
Cstruct, DStruct・・・といろんなサイズ・型の各派生先固有の構造体があります。
0171デフォルトの名無しさんNGNG
↑の人の使わせてもらうけど
class A{
  public:
 virtual void Initialize( void* )=0;
     };

  class B : public A{
 BStruct bs;
public:
 virtual void Initialize( void* p){
  bs = *(BStruct*)p;
 }
};  

こんな感じに段落をつけてる(文の最初に空白を数行いれてる)のは
見易くするためだけ?
0172デフォルトの名無しさんNGNG
>>171
それのどこが見やすいんだ?
0173デフォルトの名無しさんNGNG
>>170
dynamic_castとかCOMのIUnknown::QueryInterfaceみたいな仕組みを導入するとか。
つーか派生先で独自の初期化関数作ればいいじゃない。
0174デフォルトの名無しさんNGNG
>>170
受け渡しに使いたい派生クラス固有のオブジェクトをboost::anyかなにかで渡せば?
0175デフォルトの名無しさんNGNG
>>170
保証がないということは、
正しくなかった場合にどうしたいのかを
まず決めなければ話を始められない
0176デフォルトの名無しさんNGNG
  bs = *(BStruct*)p; というところを
bs=*dynamic_cast<BStruct*>(p); としても動作するようにいたるところ修正...とおもったけど
BStruct は構造体で無いとだめ?
0177デフォルトの名無しさんNGNG
>>176
dynamic_castに必要な条件を述べよ
0178デフォルトの名無しさんNGNG
>>177
わかんない。まわりくどい事いわないで教えろ
0179デフォルトの名無しさんNGNG
キャスト前のポインタの先に virtual
0180デフォルトの名無しさんNGNG
つ仮想関数
0181180NGNG
>>179
ケコーンしないか?
0182デフォルトの名無しさんNGNG
サンクス。
キミたちに幸せが来るように祈ってる
0183デフォルトの名無しさんNGNG
>>181
女なら品定めさせろ
男なら金くれ
0184デフォルトの名無しさんNGNG
おまえらみんな金ヤンだ
0185デフォルトの名無しさんNGNG
この流れにワラタ
0186デフォルトの名無しさんNGNG
>>183
           _._
 _|_|_|_   |_|_|     /  __            ___
   |  |_|    |_|_|    |                       ヽ
   |        /| | \   |          ───一        |
   |___    ノ  |     レ  ヽ_                 _ノ

 _/__〃  |   _|_    __
   / __   |    .|     /  / ヽ
  /       |    |    /  /   |
 /  ヽ__   レ   ノ    \/   /

    へ          へ|\ へ     √ ̄|        へ
   ( レ⌒)  |\   ( |\)| |/~|  ノ ,__√    /7 ∠、 \ .  丶\      _ __
|\_/  /へ_ \)   | |   | |∠  | |__   | /   !  |     | |_〜、  レ' レ'
\_./| |/   \     .| |( ̄  _) |     )  | |    i  |  へ_,/    ノ   ,へ
  /  / ̄~ヽ ヽ.   | | フ  ヽ、 ノ √| |   ! レノ  |  !. \_  ー ̄_,ー~'  )
 / /| |   | |   | |( ノ| |`、) i ノ  | |   \_ノ  ノ /    フ ! (~~_,,,,/ノ/
 | |  | |   / /    | | .  し'  ノ ノ   | |       / /     | |   ̄
 \\ノ |  / /      | |___∠-".   | |      ノ /       ノ |  /(
  \_ノ_/ /     (____)     し'      ノ/      / /  | 〜-,,,__
     ∠-''~                        ノ/         (_ノ   〜ー、、__)
0187170NGNG
>>173
>QueryInterface
COMはあまり知らないのですが、そこまでするのはちょっと。。。と思いました。(自分で言い出しておきながらあれですが)
>dynamic_cast
dynamic_cast<B*>(ptrA)→InitializeB()ということですよね。なるほど。
>>174
boost::anyをためしに使ってみました。
virtual void Initialize ( const boost::any &s ){
 try{
  BStruct bs = boost::any_cast<BStruct>(s);
 }catch( boost::bad_any_cast ){
 ・・・
上手く機能しているようですがこんな感じでいいのでしょうか。詳細は追って勉強してみます。
これでいってみようと思います。
>>175
正しくなければ戻り値をboolにしてfalseをreturnしてやるくらいで十分です。
どこまで保証したいのかがまったくわかりませんでしたね。失礼いたしました。(>>170でもきちんと動くのですから)
>>176
仮想関数がないとだめなんですよね。そうなると関数呼び出し時にdynamic_castしたほうがいいですね。
0188デフォルトの名無しさんNGNG
>正しくなければ戻り値をboolにしてfalseをreturnしてやるくらいで十分です。

つまり、未定義ではなく何らかの保証をするってことだな。
0189170NGNG
>>188
そういうことですかね。
boost::anyを使用することによって少なくとも希望の型が渡されたことが保証できますね。

boost::any_castはtype_id で判定しているのですね。
今回の用途にはこれで十分だと思われます。
みなさんありがとうございました。
0190デフォルトの名無しさんNGNG
実行時にユーザープログラムが型判定しなきゃいけない例ってのは
どんな場合なんでしょう?

スクリプトの実装くらいしか思いつきません
0191デフォルトの名無しさんNGNG
・ドラッグ&ドロップ
・コピー&ペースト
・アーカイブファイルからの読み込み
0192デフォルトの名無しさんNGNG

printf("");
って一見何もしないように見えて厳密には一体何が起こってるんでしょうか?
これを書くとエラーが出ないのに省くとメモリ関係のエラーで強制終了でした
コンパイラはBCC32です5.5です
謎です 紐解いて下さい
0193デフォルトの名無しさんNGNG
>>192
引数をケツから積んでるかと

>これを書くとエラーが出ないのに省くとメモリ関係のエラーで強制終了でした
おそらく別の箇所でスタックを壊したりしてる予感

周りのコードを見直して見れ
0194デフォルトの名無しさんNGNG
>>192
""だって立派な文字列だ。
0195デフォルトの名無しさんNGNG
処理系によって扱いが違うのかも。
0196デフォルトの名無しさんNGNG
"" が格納されている位置の前に格納されている
別の文字列に対してオーバーランな書き込みしてるとか
0197デフォルトの名無しさんNGNG
"は文字列ではありません。"は区切り記号です。
0198デフォルトの名無しさんNGNG
return でなく exit で終了させて問題が起こらなければ
スタックの異常
0199デフォルトの名無しさんNGNG
>192
あーおんなじ状況になったことがある
メモリまわりのバグなんだよね
不適切なメモリアドレスを操作していないかチェックしたほうがいいよ
0200デフォルトの名無しさんNGNG
何故にprintf("");を記述したのか...
0201デフォルトの名無しさんNGNG
""はサイズ0の文字列で終端コードである"\0"は含まれるからね。"\0"と書いてあるのと差はない。(はず)
それが格納されるのはあたゆる初期値付き変数と同じところになる。(そうじゃない場合もあるが)

当然それの前の部分でオーバーランをしていたらクッションになってくれてることも考えられる。
0202デフォルトの名無しさんNGNG
静的関数だけで構成されていて、インスタンスなんか作っても何もないので意味無いクラスを
つくっても良いものなのですか?なんかアホっぽい質問でスマソ
0203デフォルトの名無しさんNGNG
>>202
作りたかったら作ったら良いけど、
その関数をnamespaceに入れたらすむんでないけ?
0204デフォルトの名無しさんNGNG
自分もそう思ったのですが、名前空間のネストが深くなって打つのが面倒になったとか、
単にズボラしたくなったとかで、使う人間(他人でも自分でも)がusing namespaceした時に
(例)play()やresume()とかよくありそうな名前がかち合うのではないかとも思ったのです。
Cの時のようにxxx_プレフィックス(gtk_somefuncとかssl_somefuncとか)付けるのもアレなので
クラスで囲んでおけばいいかなと思ったので。
何か勘違いしてたら指摘してくれると嬉しいです。一人でやってると分からんことが多いので。
0205デフォルトの名無しさんNGNG
namespaceもstaticメンバ関数も打鍵量は全く一緒じゃないか?
0206デフォルトの名無しさんNGNG
JavaのMath系なんかみたいに、static関数前提のクラスというのもあることはあるよ。
Javaは名前空間グローバルな関数が作れないという事情はあるけど、
C++にもtraitsなんかがあるしね。
Effective C++にも、namespaceの代替手段として載っている。
だけどnamespaceの完全な代用には出来ない、ともね。

ただ、using namespaceを前提に考えるのはどうかな。
using hoge::hage; を使うのを推奨するけどね。
(using std::stringとして、ソース内ではstd不要のstringだけで使うとか)
0207デフォルトの名無しさんNGNG
あれは namespace が使えない場合でしょ?
クラスにする意味がないんだからこういう設計は絶対しないよ
0208デフォルトの名無しさんNGNG
「絶対」ではないよ。
traitsという例をわざわざ挙げたのに。
0209デフォルトの名無しさんNGNG
template引数ってのはnamespaceが使えない状況じゃないの?
0210デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>> なめsぱcえ
0211デフォルトの名無しさんNGNG
>>209
そうだよ。
>>208はまだお風呂からでてシャツを着ただけの情況なのでしょ。残りはスッポンポン。
0212デフォルトの名無しさんNGNG
Rbuyb >>>>>>>>>>>>>>>>>>>>>>.Rubyho!!!!!!!
0213デフォルトの名無しさんNGNG
209って具体的にどういうことなんですか?
0214デフォルトの名無しさんNGNG
>>213
namespace A{
 typedef int type;
}

template<class T=A>
struct C
{
 typedef typename T::type type;
};
このようには出来ないということかと。
0215デフォルトの名無しさんNGNG
codevct_byname,collate_byname等の
デストラクタがprotectedになってるのですが、
なぜなのでしょうか?

0216デフォルトの名無しさんNGNG
>>201
""はサイズ1の配列。"\0"はサイズ2の配列。
0217デフォルトの名無しさんNGNG
>>216
サイズという単位はありません
0218デフォルトの名無しさんNGNG
>>217
サイズは単位じゃなくて次元では
0219デフォルトの名無しさんNGNG
>>217
「要素数」ならいいか?
0220デフォルトの名無しさんNGNG
誰も配列ではなく配列へのポインタだって所には突っ込まないのね
0221デフォルトの名無しさんNGNG
>>220
C++では文字列リテラルはconst char[n]型である。
プログラミング言語C++第3版5.2.2「文字列リテラル」を参照
0222デフォルトの名無しさんNGNG
>>215
ロケールが管理しているオブジェクトだから。
0223デフォルトの名無しさんNGNG
VC6の頃はデストラクタはPROTECTEDマクロ=publicだった。
VC7でPROTECTEDマクロ=protectedになった。
意味わからんね。
0224Ruby >>>>>>>>>>>> C++++++NGNG
ばーぁ
0225デフォルトの名無しさんNGNG
なんでC+ではなくC++となったのか
0226デフォルトの名無しさんNGNG
>>225
インクリメント
0227デフォルトの名無しさんNGNG
だれかCをBASIC風に機能削減したバージョンのC--を作ってください。
0228 ◆FIcNi4f8js NGNG
>>227
WSH
0229デフォルトの名無しさんNGNG
Ruby!!!!!!!!!!!!!!!!!!!!!!!!!!!
0230デフォルトの名無しさんNGNG
>>229
お前Rubyの事ほとんど知らない奴だろう?
0231超絶Rubyhakka−NGNG
Ruby!!!!!!!!!!!!!!!!!!
0232 ◆FIcNi4f8js NGNG
>>230
きっと生姜区制だろう。
0233デフォルトの名無しさんNGNG
最近の小学生は激しいな。
0234デフォルトの名無しさんNGNG
>227
>だれかCをBASIC風に機能削減したバージョンのC--を作ってください。
Cって言語の基本的なことはとても少ないと思うんだが…
0235デフォルトの名無しさんNGNG
>>227
スレ違いだが、C--という言語はもうある。
http://www.cminusminus.org/
コンパイラのバックエンド用なので、人間様用の言語ではないが。
0236デフォルトの名無しさんNGNG
C++に特許侵害の疑い
http://www.itmedia.co.jp/enterprise/articles/0410/05/news016.html
0237デフォルトの名無しさんNGNG
特許ってうざいよね。
アイデアを特許にする人たちは俺から見たらお気楽だけど。
実際に特許の部分を有効活用して開発する人たちの血と汗と涙の結晶は特許の前では意味を
なさなくなるんだからやってらんないのでわ。
ま〜勝手にアイデアを使われて怒るのは分るけど
だからといって、訴訟を起こしての損害賠償が高すぎ。
今日の特許の乱立実態だからこそ、損害賠償額のルールを決めたほうがいいような。
もしかしてガイシュツだったりする。
0238デフォルトの名無しさんNGNG
std:auto_ptr って何で get メソッドを持ってるんですか?
ポインタの管理を全て auto_ptr が面倒見るから利点があるのだと思うのですが
0239デフォルトの名無しさんNGNG
>>238
生ポインタを引数に取る関数とか呼び出せないじゃん
0240デフォルトの名無しさんNGNG
>>236
>Kodakの特許はWang Laboratoriesのイメージングソフトウェア部門が開発した技術を
>Kodakが1997年に買い取ったもので、2個のソフトウェアが協調動作する技術、
>つまりオブジェクト指向プログラミングのキーコンセプトであり、
>ユーニス氏によれば、1960年代に開発されたSimulaコンピュータ言語にまでさかのぼることができるという。
公知で特許成立しないんじゃないの? 解説よろしく
0241デフォルトの名無しさんNGNG
よくわからんがC++のクラスは大概の実装において仮想関数ポインタのテーブル持ってるだけだから、
逆にそれが特許侵害と認められるとCなどの非OOのコードすら危うくなってくるわけだ・・・。
0242デフォルトの名無しさんNGNG
>>241
ちょっと見てみたけど、もっと抽象的なレイヤーでの特許みたい。
OOベースのRPC (Remote Method Invokation の類) と、ORB の基本概念あたりをカバーしてる。
出願時点(1993 年)に既に公知だったような気がするけど・・・
0243デフォルトの名無しさんNGNG
スラドが大好きそうなネタだけど誰もたれこんでないのん?
0244デフォルトの名無しさんNGNG
Javalobby にスレが立ってる。

http://www.javalobby.org/thread.jspa?forumID=61&threadID=14434&start=0&mode=flat
0245デフォルトの名無しさんNGNG
>>239
生ポインタに限定って時点でSTLじゃねえな
0246デフォルトの名無しさんNGNG
ヘッダにusing namespace xxx;使う場合と、
ソースにusing namespace xxx;を使うのとでは意味が違うんでしょうか?
0247デフォルトの名無しさんNGNG
>>246
どんなしょぼい参考書にも必ず書いてあると思うが。
0248デフォルトの名無しさんNGNG
意味は同じ。
効果範囲はスコープ内。
0249デフォルトの名無しさんNGNG
>>248
ヘッダはグローバルスコープで、
ソースだとそのファイルがスコープになるということかしら?
0250デフォルトの名無しさんNGNG
書いた場所から次の

}

まで。普通のauto変数と一緒。
0251デフォルトの名無しさんNGNG
>>246=249
C++にヘッダとソースの区別なんか無いよ。
0252デフォルトの名無しさんNGNG
ヘッダを#includeした先でusing namespaceしちゃうから迷惑
0253デフォルトの名無しさんNGNG
>>250
なるほど!
たとえば、

usingnamespace std;

Unko::Unko() {



}

Unko::~Unko() {



}

これだと、コンストラクタだけ、usingnamespace std;が有効になるということか。
変な仕様だなぁ。
0254デフォルトの名無しさんNGNG
頼むからヘッダファイルで using namespace しないで欲しい
0255デフォルトの名無しさんNGNG
>>253
それじゃauto変数と一緒じゃないだろ
0256デフォルトの名無しさんNGNG
{
using namespace std;
string hoge0;
}
std::string hoge1
string hoge2; //エラー
0257デフォルトの名無しさんNGNG
エラー ;がありません。
0258デフォルトの名無しさんNGNG
>>255
↓のように書いた場合は、どこまで有効になるの?

----Hage.cpp-----------
#include <stdio>

using namespace std;

Hage::Hage(){

}

Hage::~Hage(){

}

-------------------------

0259デフォルトの名無しさんNGNG
>>255,>>253 ネタニマジレスイラネ
0260デフォルトの名無しさんNGNG
>>257
ワラタ
0261デフォルトの名無しさんNGNG
>>258
> #include <stdio>

そんなヘッダはない。
0262デフォルトの名無しさんNGNG
class Date
{
protected:
static int year;
}

class DateDifference:public Date
{
public:
void getYear() {

do
{
cout<<"Enter a year between 1800 and 7000:";
cin>>year;
}while(year >= 1800 && year <= 7000);

}
という風にやりたいのですが、yearがDateDifferenceのほうで使えないのですが
どうすれば使えるようになるでしょうか?初心者なのでよくわからないのです。
教えてください。よろしくお願いします。

0263デフォルトの名無しさんNGNG
>>262
int Date::year;
0264デフォルトの名無しさんNGNG
>>262
Date::yearが定義されてないに10000ホゲー
0265デフォルトの名無しさんNGNG
>>int Date::year;
262さんありがとうございます。これをどこに書けばいいのでしょうか?
わからなくてごめんなさい。。
0266デフォルトの名無しさんNGNG
>>265
自分に礼を言ってどうする?
という突っ込みはさておき。

class Dateの定義の下にでも追加しときな。

あと、君にふさわしいのはこちら。
【初心者歓迎】C/C++室 Ver.9【環境依存OK】
ttp://pc5.2ch.net/test/read.cgi/tech/1094494997/l50
0267デフォルトの名無しさんNGNG
#include <iostream>
#include <string>
using namespace std;
class A{
private:
int x, y;
public:
A(int a, int b){x = a; y = b;}
friend ostream& operator<<(ostream& stream, A& a);
friend istream& operator>>(istream& stream, A& a);
};
ostream& operator<<(ostream& stream, A& a){
stream << a.x << " : " << a.y << endl;
return stream;
}
istream& operator>>(istream& stream, A& a){
cout << "座標入力 => "; stream >> a.x >> a.y;
return stream;
}
int main(){
A a(10, 20), b(30, 40);
cout << a << b; cin >> a; cout << a;
    return 0;
}
このプログラムを実行すると、
cpp(16) : error C2248: 'x' : private メンバ (クラス 'A' で宣言されている)にアクセスできません。 cpp(7) : 'x' の宣言を確認してください。
cpp(16) : error C2248: 'y' : private メンバ (クラス 'A' で宣言されている)にアクセスできません。 cpp(7) : 'y' の宣言を確認してください。
cpp(23) : error C2248: 'x' : private メンバ (クラス 'A' で宣言されている)にアクセスできません。 cpp(7) : 'x' の宣言を確認してください。
cpp(23) : error C2248: 'y' : private メンバ (クラス 'A' で宣言されている)にアクセスできません。 cpp(7) : 'y' の宣言を確認してください。
cpp(31) : error C2593: 'operator <<' があいまいです。 cpp(32) : error C2593: 'operator >>' があいまいです。 cpp(33) : error C2593: 'operator <<' があいまいです。
というエラーが出ます。本に書いてある通りに書いたんですが、なぜなのかわかりません。
どうしたら、ちゃんとできるのか教えてもらえないでしょうか?
0268デフォルトの名無しさんNGNG
>>267
特に問題なさそうだが?
ちなみに gcc, bcc55, VC7 では通ったぞ。
インライン定義(friend 宣言に関数の内容も一緒に書く)してもダメか?
0269デフォルトの名無しさんNGNG
コンパイラが悪いのでは?
0270デフォルトの名無しさんNGNG
>>267
VC はサービスパック必ずあてとけ
只でさえバグ(珍妙な仕様も含む)だらけだが、少しはマシになる
0271デフォルトの名無しさんNGNG
いい加減VC6は(r
0272デフォルトの名無しさんNGNG
C使いならVC6でもいいかもC++使うんならVC6じゃ話になんね
0273デフォルトの名無しさんNGNG
operator <<, >>の定義が別ファイルにあってヘッダを読んでないとかじゃないの?
0274デフォルトの名無しさんNGNG
ISO C++が策定されたの98年だっけ?
VC6もたしか98年だから対応して無くて当然だと思われ。
さっさと.NET2003に乗り換えれ。良いぞ。boostもLokiも動く。
コンパイラだけならただなんだろ?
0275デフォルトの名無しさんNGNG
時代考証については >>274 が言っているのが正しい
VC6 は今でも思いっきり現役で、他に選択肢がなく ISO と違うと嘆いても始まらない場面が少なくない
0276デフォルトの名無しさんNGNG
VC6軽いんだよ…
0277デフォルトの名無しさんNGNG
VC6はC++ではない、と割り切って使えば構いません。
でも、C++スレで質問しないでね。
0278デフォルトの名無しさんNGNG
>>277
__closureだの__propertyだのが大量に入ってるBCBのコードはどうしましょう
0279デフォルトの名無しさんNGNG
窓から投げ捨てろ
0280デフォルトの名無しさんNGNG
>>278
奴は構文がC++に似ているDelphiの一種だと思え。
0281デフォルトの名無しさんNGNG
潔癖性が多いな
0282デフォルトの名無しさんNGNG
>>277
まだ ISO が定義する「C++」は出荷されていないはず
VC6 は ARM C++ と理解すればいい
0283デフォルトの名無しさんNGNG
>237 :デフォルトの名無しさん :04/10/05 14:44:36
> 特許ってうざいよね。
> アイデアを特許にする人たちは俺から見たらお気楽だけど。
> 実際に特許の部分を有効活用して開発する人たちの血と汗と涙の結晶は特許の前では意味を
> なさなくなるんだからやってらんないのでわ。
> ま〜勝手にアイデアを使われて怒るのは分るけど
> だからといって、訴訟を起こしての損害賠償が高すぎ。
> 今日の特許の乱立実態だからこそ、損害賠償額のルールを決めたほうがいいような。
> もしかしてガイシュツだったりする。

特許を誤解しているよ。特許ってのは役人と大企業のためにある。
そして損害賠償請求をする為に取得するんだ。
0284デフォルトの名無しさんNGNG
C++で書かれたゲーム(出来ればSTG)のソースコードを公開されているゲームを探してるんだけど
もし知ってるのがあれば教えてくださいな
0285284NGNG
追記、3Dのゲームでお願いします
0286デフォルトの名無しさんNGNG
cubeじゃダメかね?
http://www.cubeengine.com/
0287284NGNG
サンクス!英語が辛いけど、読んでみまっす
あとこれの置き場所を見てsourceforgeから探すことを思いつきましたですYo
0288デフォルトの名無しさんNGNG
classや構造体の、メンバへのアクセスは遅いので、
ループの際はなるべく一時変数に取った方が良いそうですが、
これはやっぱり階層が深まるほど遅いのでしょうか。

A: temp = class->child->grandchild->great-grandchild->data;
B: temp = class->data;

それともAとBは、内部的には同じ速さになったりするのでしょうか。
0289デフォルトの名無しさんNGNG
>>288
君が気にしなきゃならないほど遅くないからほっといていいよ。
0290デフォルトの名無しさんNGNG
>>289
生成物の実行速度はほとんど変わらないが、
開発チームの保守速度は確実に低下する。
0291デフォルトの名無しさんNGNG
>>288
計ってみましょうよ.
VC++だったらこのスレの上にrdtscを貼ってくれたひとがいるし,(型は__int64でいいの?)
Linuxだったら
#include <asm/msr.h>
にrdtscはある.
0292デフォルトの名無しさんNGNG
間違えやすいし見にくいし横に長くなって鬱陶しいから保存しろ
0293デフォルトの名無しさんNGNG
>>290
そんなこと聞いていない
0294デフォルトの名無しさんNGNG
以下の関数は0~15のintをcharの0~9,A~Fにして出力させようとしたのですよ。
inttochar16(int)にint型の0~15を入れた場合はちゃんとcharの0~9,A~Fが返ってくるのですが
ポインタで回そうとすると失敗します。ボスケテ。

#include <iostream.h>
char inttochar16(int i,int intDefault){//intの0~15をcharの0~9,A~Fに変換します。
if((i<10)&&(i>-1)){
return i+48;
}else if((i<16)&&(i>9)){
return i+55;
}else{
return intDefault;
}
}//END inttochar16

int main(void){
int i[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int *pi;
pi = &i[0];
while(*pi){
cout << inttochar16(*pi,36) << "\n";
pi++;
}
return 0;
}
0295デフォルトの名無しさんNGNG
お前らは、プロもしくはノンプロのプログラマであって、断じてパスタ職人ではないはずだ。
誰ですか、スパゲッティコードを奨励している人は?
0296288NGNG
レスありがとうございます。
分かりやすくしようと、ちょっと大げさに書きすぎたかなw
実際はイテレータによるアクセス程度です

>>291
簡単なテストコードだと、吐いたアセンブラを見る限りどちらも
全く差は無いのですが、私が思いつかないような条件が重なったりすると
どうなのかなぁ…と思い質問お願いした次第なんです。

やっぱり皆さんのレスみても、まるっきり同じって感じでは無いですね。>ほとんど、〜ほど
0297デフォルトの名無しさんNGNG
負の数に%を適用した結果ってどうなるんですか?不定?
0298デフォルトの名無しさんNGNG
>>294
どう失敗したのか書けよ。
あとint配列の最後に0が入っているとは限らない。
0299デフォルトの名無しさんNGNG
>>289 >>290
わずかでも遅くなるのか?
0300デフォルトの名無しさんNGNG
>>298
つーか最初のループ条件で偽になるな、これ。
0301294NGNG
>298 最初に0が入ってるからループに入らないだけでした。Thx。

で、別な疑問が沸いたのですが、
int i[不定の自然数];
int *p;
p = &i[0]
で、iの終わりまで処理を行いたい場合、
whileループで回すにはどうすればいいでしょ。
while(*p == null){だとnullなんて知らんと怒られます。
0302デフォルトの名無しさんNGNG
>>301
頼むから、あてずっぽうでコード書くな。
なんか知らんけど動いたからいいやっつー新人が一番手に負えない・・・。
while( *p == null )
pの指してる先の値が null?
いつ終端に null なんか入れた?
つーかそもそも null 定義して無いだろ?
0303302NGNG
つーかそれだと *p が null の間繰り返すだろ。
0304294,301NGNG
>302,303
少し頭冷やしてきます....すいません。
0305デフォルトの名無しさんNGNG
>>301
#include <iostream>
#define ARRAYNUM(a) (sizeof (a) / sizeof (a)[1])
using namespace std;
int main(void) {
  int i[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  int *pi;
  pi = &i[0];
  while (++pi != i + ARRAYNUM(i)) {
    cout << inttochar16(*pi, 36) << "\n";
  }
  return 0;
}
0306デフォルトの名無しさんNGNG
>>301
ARRAYNUM っていうマクロにするかどうかは別として、個数の定まった
配列に対してsizeof(T) / sizeof(T[0]) で個数を得るのはC / C++のイディオムの一つ。
0307デフォルトの名無しさんNGNG
C++ではマクロでなくテンプレートだな
template <typename T> int arraynum( const T& t ){ return sizeof( t ) / sizeof( t[ 0 ] ); }
0308デフォルトの名無しさんNGNG
template< typename T, size_t N > size_t arraynum( T (&)[N] ){ return N; }

だろ。
0309デフォルトの名無しさんNGNG
template <typename T, std::size_t N> std::size_t arraynum( T (&)[N] ){ return N; }
な
0310デフォルトの名無しさんNGNG
template <typename T, std::size_t N> inline std::size_t arraynum( T (&)[N] ){ return N; }
つかそもそも std::size_t でいいの?unsigned int じゃダメ?
0311デフォルトの名無しさんNGNG
やっぱり気が狂ったようなところのある言語だな
0312デフォルトの名無しさんNGNG
カットオペレータを追加すれば、そのまま Prolog になりそうだよね。
0313デフォルトの名無しさんNGNG
俺は配列の要素数を求める式を見た時はふ〜ん、こんなこと出来るんだ。
ふつうにテンプレートってすごいなって具合に感動したけど、
char (&test(...))[2];
この式を見た時はマジC++に感動した。
0314デフォルトの名無しさんNGNG
普通の人間なら typedef なりして見やすくしろと思うだろうけどな
0315デフォルトの名無しさんNGNG
>301
sizeofで配列のサイズを測るか
その部分を関数化して、関数の引数に何文字操作するかをしてるするのかが普通。
まずは、配列と文字列の区別をしっかりした方がいいと思う。

あと>294のソースは
return i+48;
}else if((i<16)&&(i>9)){
return i+55;
この辺りは、頼むから、'0'や'A'って書いてくれ。
0316デフォルトの名無しさんNGNG
>>288
階層が深まるほど評価に必要な命令数は当然増える。
でも、階層に比例して処理時間が増大するかどうかは
最適化に依存するので実測しないとわからない。

ループ前に一時変数に取っておくようにソースを書いておけば、
ほとんどの場合で無視できる差に抑えることができる。
0317デフォルトの名無しさんNGNG
DLLで作ったクラスを、exe側で継承した場合、何か問題出る?

dll

EXPORT class DllClass{
・・
};
-----------------------

exe側
class ExeClass : public DllClass{
・・
}

exe側で派生クラスを使用
ExeClass *pExeClass = new ExeClass ;
delete pExeClass ;

問題なかったとしても、DLL変更したら、exe側もリビルド必要?
DLLとクラスは、やっちゃいけないけど動くこともあるとか微妙な説明が多くて混乱する・・
0318デフォルトの名無しさんNGNG
>>317
> DLLとクラスは、やっちゃいけないけど動くこともあるとか微妙な説明が多くて混乱する・・

これが問題。わかってんじゃん。
0319デフォルトの名無しさんNGNG
Cで構造体の中に構造体をいれてつかってんだけど
C+でクラスにしたいときってクラスの中のクラスってできる?
0320デフォルトの名無しさんNGNG
出来るにょ
0321デフォルトの名無しさんNGNG
1にょっき
0322デフォルトの名無しさんNGNG
>>319
やってみてから聞けよ。
0323デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1094494997/811
こっちでも馬鹿な質問してるな。
0324デフォルトの名無しさんNGNG
包含っていう。
0325デフォルトの名無しさんNGNG
>>324
睾丸!?なんていやらしいお名前。
0326悩める初心者NGNG
g++とC++言語の話だけど、、、

strcmpとかの標準提供関数を、自前でC言語で実装して、ライブラリ作りました。

C言語で、strcmpを呼び出すプログラムかいて、gccでコンパイル、リンク
するとOKだけど、

C++でstrcmp呼び出すプログラム書いて、それをg++でコンパイル、リンクすると
NGがでちゃいます。なんかうまくリンクできる方法ってないですか?g++のバグかな?

なお、staticにしないとコンパイルは通ったんだけど、要件上staticじゃないと
だめなんです。

g++ -L/home/hoge/lib hello.cpp -o HELLO -lmylib -static
/lib/libc.a(strcmp.o)(.text+0x0): In function `strcmp':
multiple definition of `strcmp'
/home/hoge/lib/libmylib.a(strcmp.o)(.text+0x0): first defined here
collect2: ld returned 1 exit status


OS:RedHat
compiler:GCC
Lang:C++
0327デフォルトの名無しさんNGNG
コアチームに入るしかないな。
0328デフォルトの名無しさんNGNG
-z muldefs でりんくできないかなーー。
でも、どっちのstrcmpが使われるのかシラン。
0329デフォルトの名無しさんNGNG
いや、これはコアになれという要件だよ。
間違っても namespace で逃げたりしちゃだめなんだよ
0330デフォルトの名無しさんNGNG
>>326
free-standing environment に移植可能なコードを書こうとしているのか?
0331デフォルトの名無しさんNGNG
// a.h ////////////////////
#include "b.h"

class A { void func(B b); };

// b.h ////////////////////
#include "c.h"

class B{ C *pc; };

// c.h ///////////////////
#include "d.h"

class C{ D d; };

// d.h //////////////////
#include "a.h"

class D : public A { ・・・ };

このように4つのファイルでインクルードのループができたような
状態のプログラムがあるのですが、コンパイルすると
d.hで 定義されていない基底クラスAが使われています。
みたいなエラーが出るのですが、原因がわかりません。

前方参照とかの関係かとおもったので、d.h のDクラスを定義する前に
class A; という行を追加してみてもエラーが消えません。
さらに c.h で class D; b.hで class C; a.hで class B; という
前方宣言をそれぞれいくら追加したり消したりしても直りません。
b.h の C *pC; と #include "c.h" をコメントアウトするとエラーがなくなります
が、それでは考えている動作をさせることができません。
どうすれば解決できるかわかる方がいましたら教えていただけないでしょうか。
0332デフォルトの名無しさんNGNG
>>331
ありがちなパターンで、ヘッダの最後を改行してないってオチとか・・・
0333デフォルトの名無しさんNGNG
>>331
根本的に設計見直せ。

と、それだけだとなんだから一応。
b.hの#include "c.h"を消して代わりにclass C;と書く。
0334デフォルトの名無しさんNGNG
ここでpimpleイディオムですよ
0335デフォルトの名無しさんNGNG
pimpl ダタorz
0336デフォルトの名無しさんNGNG
>328
試してみます。

>330
ちょっとはしょってかきましたけど、組み込み向けCPUのバイナリ作ってるんです。
卒研である機器の制御用のプログラム書いてます。機器側にはライブラリ持ってないんで、staticなバイナリの生成が必要です。
0337326=336=悩める初心者NGNG
です。m(_ _)m
0338デフォルトの名無しさんNGNG
てかそもそもここはgccに限定したスレじゃないのでスレ違い。
答えてる香具師も一緒にgccスレ逝け
0339超絶Rubyhakka−NGNG
ハァ?
0340デフォルトの名無しさんNGNG
>>339
ハァ?
0341デフォルトの名無しさんNGNG
#include <iostream>
using namespace std;

int main(){
try{
throw "nullpo!";
}
catch(char *e){ cout << "GA!" << e << endl;}
return 0;
}

なぜか文字列をcatchできないんですが、なぜでしょうか?
Cygwinのgcc3.3.1です。
0342デフォルトの名無しさんNGNG
Linux+sh3=Shnux
0343デフォルトの名無しさんNGNG
>>341
gccのバグ
0344デフォルトの名無しさんNGNG
C++の文字列リテラルは const char[N]型
0345デフォルトの名無しさんNGNG
暗黙に const_cast がかかる特殊なケース
0346デフォルトの名無しさんNGNG
>>331

//#include "b.h"

template <typename B>
class A { void func(B b); };
0347デフォルトの名無しさんNGNG
>>341>>345
それがなぜかVC++ならcatchできるんです
0348デフォルトの名無しさんNGNG
>>347
char*ではcatch出来ないのが正しい。const char*ではcatchできる。
ISO/IEC 14882:1998 15.1.3
The temporary object created for a throwexpression that is
a string literal is never of type char* or wchar_t*;that is,
the special conversions for string literals from the types
“array of const char” and “array ofconst wchar_t” to the types
“pointer to char” and “pointer to wchar_t”, respectively,
are never applied to a throwexpression.
0349デフォルトの名無しさんNGNG
>>347
VC6とか言ったら死刑
0350デフォルトの名無しさんNGNG
>>348
英語本当に読んだ?
0351デフォルトの名無しさんNGNG
>>349
vc7.1でも死刑?ガクガクブルブル。
0352デフォルトの名無しさんNGNG
>>350
「const char[N]→char*の変換は、throwに対しては適用されない。」
ということでしょ?
0353悩める初心者NGNG
328さん、

-z muldefsでやってみたら、コンパイル通過しました!
リンクの詳細しらべてみましたけど、ちゃんと自前の関数読んでるようです。
ほんとありがとうございます。

#まだまだ勉強不足ですね。。。
0354デフォルトの名無しさんNGNG
試しに
catch(char *e){ cout << "GA!" << e << endl;}
catch(const char *e){ cout << "ga!" << e << endl;}
としてみると、
VC++では "GA!nullpo!"
GCCでは"ga!nullpo!"
となってしまう
0355デフォルトの名無しさんNGNG
catch(const char *e){ cout << "ga!" << e << endl;}
catch(char *e){ cout << "GA!" << e << endl;}

とやったらVC++でも"ga!nullpo!"と吐くんだろうか
0356デフォルトの名無しさんNGNG
だから規格の>>348を読めって。
『char*ではcatch出来ないのが正しい。const char*ではcatchできる。』
だからこの場合VC++は間違い。GCCが正しい。
Microsoftの中の人自体が誤って理解してるんじゃないのか?
http://www.microsoft.com/japan/msdn/library/ja/jpdndeepc/htm/deep061799.asp
0357デフォルトの名無しさんNGNG
>>355
今度はコンパイルできなくなった
test.cc(9) : error C2312: 'char *' : is caught by 'const char *' on line 8
0358357NGNG
嘘
バージョンによる。
0359デフォルトの名無しさんNGNG
2005 でも
error C2312: 'char *' : is caught by 'const char *'
0360デフォルトの名無しさんNGNG
VC++ Toolkit 2003
error C2312: 'char *' : is caught by 'const char *' on line 10
やっぱりコンパイラを作るときにMicrosoftが規格を勘違いしてる。
0361デフォルトの名無しさんNGNG
>>359
やられた。
つーか、発揮し言ってどうでもいい問題なんだけど。
0362デフォルトの名無しさんNGNG
bccだと順b

あ、誰も聞いてない
0363デフォルトの名無しさんNGNG
>>361
だな
0364デフォルトの名無しさんNGNG
>>362
その先を知りたい。もしかして順番によって結果が変わる?
0365デフォルトの名無しさんNGNG
>>361,363
よくないだろう、正しいはずのコードがコンパイルすらされないんだから。
0366デフォルトの名無しさんNGNG
>>365
キチガイだね
0367デフォルトの名無しさんNGNG
いや、char*がconst char*に先に捕まるのは当然だし、
コンパイルすらされないのはエラーレベルの設定の話でしょう。
0368デフォルトの名無しさんNGNG
>>365
そもそも正しいはずのコードとはなんですか?
0369デフォルトの名無しさんNGNG
お?なんか哲学的になってきたね
0370デフォルトの名無しさんNGNG
char* p;
p = "literal";

こいつにVC++7.1もg++も文句言ってくれません。
仕様的には>>344なんですか?
0371デフォルトの名無しさんNGNG
>>370
あまりに多くなされる書き方なので文句を言わないようになってる
0372デフォルトの名無しさんNGNG
>>370
ISO/IEC 14882:1998 4.2 Array-to-pointer conversion -2による。
0373デフォルトの名無しさんNGNG
#include <iostream>
int main(){
try{
throw "nullpo!";
}
catch(const char *e)
{
std::cout << "ga!" << e << std::endl;
}
return 0;
}
これならVC++は文句言わずにコンパイルするが…
char*をconst char*に変換してるだけなのではないか…
0374デフォルトの名無しさんNGNG
>>366
365 は間違ったことを言っていないぞ?
例外が捕獲できるかどうかは、翻訳ではなく実行の問題。
0375デフォルトの名無しさんNGNG
オプションでいいからエラーにしてほしいな・・・。
どっちにしろそんなコードまともに動かないし。
0376デフォルトの名無しさんNGNG
>>374
残念ながら、確実な未来というのはあるのだよ。
0377デフォルトの名無しさんNGNG
規格的にどうかはともかく、
>>370が規格的に正しいのなら、
>>354はVC++のほうが自然に感じる。
困った規格だ。
0378デフォルトの名無しさんNGNG
禿はノーセンスだからね
0379デフォルトの名無しさんNGNG
>>376
基準が明確化されていない洞察をしてはならないのが基本。
コピーコンストラクタが排除できても private ならはじくように。
0380331NGNG
>>333>>346
非常に参考になります
ありがとうございました
0381デフォルトの名無しさんNGNG
catch(const char*)にchar*が捕まるのって明確化されてないの?
0382デフォルトの名無しさんNGNG
>>377
>>370は規格的に正しくないよ
0383デフォルトの名無しさんNGNG
>>382
「文字列リテラルはchar*に代入できる。」
プログラミング言語C++第3版 5.2.2より
0384デフォルトの名無しさんNGNG
>>383
マジすか…
失礼しました
0385デフォルトの名無しさんNGNG
文字列定数に書き込めたとしても、strchrで番兵法を使う
ときぐらいしかメリットが感じられなかった。バグ出しやすいし。
実用上は必ずコンパイルオプションで書き込めなくしてしまう。
0386デフォルトの名無しさんNGNG
>>385
「文字列リテラルはchar*に代入できる。…(中略)…しかし、
このようなポインタを介して文字列リテラルを変更しようと
すると、エラーになる。」
プログラミング言語C++第3版 5.2.2より
0387デフォルトの名無しさんNGNG
>>386
禿本いい加減だなw
0388デフォルトの名無しさんNGNG
いや、厳密さは求めていないが・・・
0389デフォルトの名無しさんNGNG
いや、Cとの互換を保つため…
0390デフォルトの名無しさんNGNG
>>387
ISO/IEC 14882:1998 2.13.4 String literals -2
"The effect of attempting to modify a string literal is undefined."
0391デフォルトの名無しさんNGNG
>>390
>undefined
0392デフォルトの名無しさんNGNG
>>380
>d.hで 定義されていない基底クラスAが使われています。
だってこのままじゃAがどういう型か判らないもん。c.hでストップかけてんじゃん。
だから、
// c.h ///////////////////
class D;
class C{ D* d; };
にすればいいだけなのでは?
まっ。見てねーんだろーけど。
0393超絶Rubyhakka−NGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
0394デフォルトの名無しさんNGNG
>>392
>>346
0395デフォルトの名無しさんNGNG
class Base1 { protected : int x; };
class Base2 { protected : int x; };
class Foo {
  public:
  Foo(int x) : x(x);
}
曖昧だって言われた。(涙
不可能なのか・・。
0396デフォルトの名無しさんNGNG
>>395
Base? にコンストラクタがない以上(ry
0397デフォルトの名無しさんNGNG
>>395
>>396の前にFooにメンバー変数xがない。以上。
0398デフォルトの名無しさんNGNG
>>397
それを言うなら曖昧(ry
0399デフォルトの名無しさんNGNG
>>395
貴方は何かにつけて過剰な省略をする傾向が強いようですね。たとえば本を読むときに一度の何十ページもめくってみたり、
タバコを吸うとき一度に5本ぐらいくわえていたり、お好み焼きにはキャベツしか入れなかったり、食事のとき箸を一本しか持たなかったり、
してしまうタイプではないでしょうか?表現に不十分な部分がないか、チェックお願いします。
0400395NGNG
>>397
確かにそうでした。書き直します。

class Base1 { protected : int x; };
class Base2 { protected : int x; };
class Foo ; public Base1, Base2 {
  public:
  Foo(int x) : x(x);
}

で、これが曖昧だってのは、納得。
2つの派生元クラスの、それぞれの x を初期化する方法としては、
各派生元クラス (Base1, Base2) に、自クラスのメンバ x を初期化するコンストラクタをそれぞれ用意して、
それら2つのコンストラクタを Foo のコンストラクタから呼んでやる、ってことね。
0401デフォルトの名無しさんNGNG
派生元のクラスがひとつでも同じ結果かと思うんですが…
0402デフォルトの名無しさんNGNG
全角空白はいいとしても、スペルミスでエラーが出るソースを張るなよ
class Foo : public Base1, Base2 {
  public:
  Foo(int x) : x(x){};
};
そもそも曖昧以前に、基底クラスのメンバを直接初期化できん。
0403デフォルトの名無しさんNGNG
-class Foo ; public Base1, Base2 {
+class Foo : public Base1, Base2 {

-Foo(int x) : x(x);
+Foo(int x) : x(x){}

全角もウザイ
0404デフォルトの名無しさんNGNG
-class Foo : public Base1, Base2 {
+class Foo : public Base1, /*private*/ Base2 {
0405デフォルトの名無しさんNGNG
>>400
最後のセミコロン忘れてるし・・・
0406デフォルトの名無しさんNGNG
>>400
要するにダメダメ。
0407デフォルトの名無しさんNGNG
全角はしょうがないだろ
この程度のちゃちなコードなら、実行よりパッと見の可読性重視でOK

2chブラウザ全盛の昨今、&nbsp;とかも厳しいのが多いしなぁ
ちと試してみるか…

    Hoge* p_hoge = new Hoge;
0408407NGNG
うん、やっぱりコピペするとついて来ちゃうな…
0409デフォルトの名無しさんNGNG
質問させていただきます。
たびたび関数ポインタテーブルを使って処理してきたのですが、今度
クラスのメソッドでやろうと思ってプログラムを書いてみたのですが、

'int (__thiscall クラス名::*)(void)' から 'int (__cdecl *)(void)' に変換することはできません

とエラーがでてしまい、ダメなようです。
メソッドポインタでGoogleするとC++について語ってるところがさっぱり見当たりませんでした。
C++ではメソッドポインタを取得し、利用することはできないのでしょうか?
0410デフォルトの名無しさんNGNG
まともな本読めばメンバ関数ポインタの使い方ぐらい載ってる。
0411デフォルトの名無しさんNGNG
あ、なるほど。
メソッドではなくメンバ関数と呼ぶのですね。
メンバ関数ポインタでぐぐったら、色々出たのでがんばれそうです。
ありがとうございました^^
0412デフォルトの名無しさんNGNG
regexって何の略?
0413デフォルトの名無しさんNGNG
regular expression トカ
0414デフォルトの名無しさんNGNG
以下のプログラムで、コンソールにwcoutで表示したい文字が表示されません。
stringとcoutを使ったら表示されるのですが・・・
何が悪いのでしょうか・・・・・・・・・・・・・・・・


#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;

#include <conio.h>

int main(int argc, char* argv[])
{

wstring wstr;
wstr = L"こんにちわ世界!";
wcout << wstr << endl;

getch();

return 0;
}

0415デフォルトの名無しさんNGNG
ロケールあってる?
あともしVC6だったら標準ライブラリがバグってるからまともに使えないよ。(.NETは未確認)
0416>>414NGNG
>>415
ΩΩΩナ...ナンダッテー

VC6です。バグなのですね・・・
0417デフォルトの名無しさんNGNG
>>416
std::locale::global(std::locale("japanese"));
0418超絶Rubyhakka−NGNG
C++は糞だとまたもや証明された!
0419デフォルトの名無しさんNGNG
C++で2重のforループを使い実行結果が以下のようになるように
したいのですが・・・誰か教えて下さい。
A
AB
ABC
ABCD
ABCDE
0420デフォルトの名無しさんNGNG
>>419
#include <iostream>

int
main()
{
    char str[] = "ABCDE";

    for( int i = 0; i < 5; ++i )
    {
        for( int j = 0; j <= i; ++j )
        {
            std::cout << str[ j ];
        }
        std::cout << std::endl;
    }

    return 0;
}
0421デフォルトの名無しさんNGNG
>>419
for(;;){
for(int i=1;i<=5;i++)
printf("%.*s\n",i,"ABCDE");
break;
}
0422デフォルトの名無しさんNGNG
ありがとうございました☆
0423デフォルトの名無しさんNGNG
>>419-422
ここはいつの間に宿題請負のスレになったんだ?
しかも>>420間違ってるし。
0424デフォルトの名無しさんNGNG
class mycls{
public:
static int x;
};
int main(){
mycls c;
c.x = 2;
return 0;
}
とするとgccのコンパイラに以下のように怒られるのですがなぜでしょうか.
hoge/hoge/hoge.o(.text$_...(略)...) undefined reference to mycls::x
collect2: ld returned 1 exit status
0425デフォルトの名無しさんNGNG
int mycls::x;
0426デフォルトの名無しさんNGNG
>>424
undefined reference to mycls::x
これくらい読めるようになっとけ。
0427424NGNG
それをどこで宣言するのでしょうか?
myclsのstatic int x;がint mycls::xじゃないんでしょうか?
0428デフォルトの名無しさんNGNG
>>424
>undefined reference to mycls::x
mycls::xへの参照が未定義てす。
未定義については
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
0429デフォルトの名無しさんNGNG
>>427
まずは宣言と定義の意味をきちんと調べること。

myclsのstatic int x; は宣言。これとは別に定義が要る。
これが定義になっちゃったら、このクラスを複数のファイルで使えないだろ。
0430デフォルトの名無しさんNGNG
>>428 最悪
0431デフォルトの名無しさんNGNG
要はこんな感じだ。
mycls.h
────────
class mycls{
public:
static int x;
};

mycls.cpp
────────
int mycls::x;
0432デフォルトの名無しさんNGNG
>>425-431
ありがとうございました.
手元の本を読んで定義と宣言の違いを再勉強してきました.
static指定するからにはオブジェクトの生成と同時に変数を定義してしまっては
意味がないということですね.

ところで,int mycls::xをmain()関数内で宣言すると同じエラーが発生するのは
なぜでしょうか?
0433432NGNG
>>432
正確には定義ですね(訂正
0434デフォルトの名無しさんNGNG
>>432
いや、あんた理解できてないよ。安心して出直せ。

> int mycls::xをmain()関数内で宣言すると同じエラーが発生
まともなコンパイラならそんな糞な挙動しないと思うんだが。
本当だと言いたいんなら、コンパイラとソースを貼ってみな。
0435デフォルトの名無しさんNGNG
>>432
mycls a;

struct hoge
{
int y;
hoge() { y = a.x; }
};

hoge b;

main()
{
int mycls::x = 1234;
std::cout << b.y;
}
0436デフォルトの名無しさんNGNG
>>434
> まともなコンパイラならそんな糞な挙動しないと思うんだが。
グローバルなスコープを持つクラス変数を、関数内で定義はできないと思うが。
こういうコードでしょ?

int main()
{
  int mycls::x;
}

C のグローバル変数もそうだが、グローバルスコープを持つものは関数の
外で定義しないと。

int mycls::x;
int main() {}
0437デフォルトの名無しさんNGNG
>>434
ハズイヤツ。
0438432NGNG
>>436
そういうことでしたか.了解しました.
長々とありがとうございました.

# >>432 同じエラーが発生する
というのは間違いでした.まぎらわしいことしてすいません.
>>436 のようなコードで躓いていました.
0439デフォルトの名無しさんNGNG
fstreamからstd::string strに一行を読み込みたいのですが
getline()は何故か知りませんがstd::stringで受け取れません。
そしてfstream >> str;とすると一行読み込みになりません。
>>で\nまで読み込む設定があるのかと探してみましたが見つかりませんでした。
char[]の一時変数にとりあえず読み込むしかないのでしょうか?
0440デフォルトの名無しさんNGNG
>>439
std::getline
0441デフォルトの名無しさんNGNG
>>439
std::getlineを調べてみてください。
0442デフォルトの名無しさんNGNG
C++ で Java の final にあたるものってありますか?
0443439NGNG
<string>にて発見しました。どうもです。
中身は私には解読不可能でしたが。。。
0444デフォルトの名無しさんNGNG
>>442
何をしたいのかもう少し具体的に書いた方が良い
それによって答えが変わってくると思う
0445デフォルトの名無しさんNGNG
継承を制限したいんだろうとESPを駆使してみる
0446デフォルトの名無しさんNGNG
コンストラクタをprivateにすれば?
0447デフォルトの名無しさんNGNG
>>446
先生、コンストラクタをprivateにしてもメンバ関数の中のローカルクラスで継承できてしまいました。
0448デフォルトの名無しさんNGNG
>>442
thisを見て、自分じゃなかったらエラー吐いて死ぬようにすりゃーいいかも。
0449デフォルトの名無しさんNGNG
ん名門無理
0450448NGNG
コンパイル時の制限じゃないと意味無いか
0451439NGNG
続けての質問ですがお願いします。
一行読み込んでその先頭位置と一緒に出力するプログラムです。
\r\n区切りのテキストだと上手くいくのですが\n区切りのテキストだと無限loopに陥ってしまいます。

while ( !fs.eof() ) {
  std::streampos pos = fs.tellg();
  std::getline(fs,str);
  std::cout << pos << ":" << str << std::endl;
}
tellg()を実効しなければ上手く動作しますが、何がいけないのでしょうか?
環境はwindows2000とVC6SP6です。
0452デフォルトの名無しさんNGNG
>>448
どの関数でチェックを入れる?
まさか全ての関数に入れるとか?

ちなみにコンストラクタじゃムリだよ
0453439NGNG
tellg bug VC6 で多数引っかかりましたorz
0454デフォルトの名無しさんNGNG
>>453
もう解決しちゃったみたいだけど、一応。
Visual C++ Toolkit 2003では解決してたよ。
0455デフォルトの名無しさんNGNG
グローバルスコープにあるポインタを使うのと
ポインタをコピーして同じオブジェクトを指すポインタを複数
使うのでは処理速度とか違うの?
スマートポインタ云々は抜きにして。
0456デフォルトの名無しさんNGNG
>>455
前者と後者の違いをソースで示してください。
0457デフォルトの名無しさんNGNG
前者は普通のグローバル変数(ポインタ)
後者はあるクラスのメンバであるポインタを別のクラスの
メンバにコピー(別のクラスのメンバの方はコピー用に作成)
//前者
class Global
{
public:
static LPDATA pData; //コピーは行わない
}

//後者
class A
{
public:
LPDATA pData; //こっちでオブジェクト作成
}
class B
{
public:
LPDATA pCopyData;
}
B::pCopyData = pData; //コピーして使いまわし
0458デフォルトの名無しさんNGNG
>>457
メンバ変数は遅くなる。
const 修飾すれば速くなることがある。
どっちもループカウンタにでも使わない限り誤差の範囲。
0459デフォルトの名無しさんNGNG
>>455
そりゃグローバルの方が速いだろ
コンパイラによるがグローバルは最適化がかかりにくかったりするが
1つで済むものを複数で管理する必要はない

ただし「本当に1つで済むんだな?」と、自分に小一時間問いただしてみることを薦める
後者を使うことになるケースは多いから
0460デフォルトの名無しさんNGNG
メンバ変数はグローバル変数より更に最適化がかかりにくいよ
0461デフォルトの名無しさんNGNG
そうでもないよ
0462デフォルトの名無しさんNGNG
ここでも見たのか?
ここのは多分使ってるコンパイラが古いんだろ。
http://www.emit.jp/prog/prog_opt0.html
0463デフォルトの名無しさんNGNG
自分の考えと違う事実をコンパイラが古いからで片付けようとする態度は
相手が携わっている分野を侮辱していることがあるから気を付けた方がいいぞ
もっとも煽り目的ならこの限りではないが
0464デフォルトの名無しさんNGNG
VC++7.1 -O2
最適化前 0.991秒
最適化その 1.001秒
最適化その2 0.991秒
最適化その3 0.991秒

自分で試しもしないで個人サイトの情報を真に受けるバカはこれだから困るね。
0465デフォルトの名無しさんNGNG
なるほどVC使いだったかw
0466デフォルトの名無しさんNGNG
メンバ変数の最適化もかからないようなコンパイラよりはVC++の方がマシだろ
0467デフォルトの名無しさんNGNG
あ? メンバ変数の最適化?? 何の話だ
0468デフォルトの名無しさんNGNG
以下池沼だか上のサイトの盲信者だかよくわからん香具師は放置で
0469デフォルトの名無しさんNGNG
最近もどっかのスレでfomit-frame-pointer論争があったし、
特に最適化関連の話は、Web上の情報が本当かどうか自分で確かめた方がイイね。
0470デフォルトの名無しさんNGNG
自分で試した結果が絶対正しいと思い込んでる馬鹿がいるようなので補足しておくと、
そのサイトのサンプルコードがだめだめ。

VC++7.1 -O2 で実行すると、ループが展開されてしまって、

for(int i = 0; i < 100000; i++) test.SetValue(i);
の行が
for(int i = 0; i < 100000; i++);
test.SetValue(99999);
のように最適化されてしまう。
これではまともな速度比較が出来ない。
test.SetValue(int);を __declspec(noinline) 指定する必要がある。

次に、
>メンバ変数の値が書き換えられ、ループの条件が変わるかもしれない
と言っているにもかかわらず、ループカウンタ用メンバ変数が書き換えられていないことが自明なループをまわしている。
これではよほど馬鹿なコンパイラで無い限り最適化できてしまう。
m_pBuffer[m_nCounter] = n;
の行をメンバ変数にくくりだす必要がある。
void CTest::SetBuffer( int* pBuffer, int nCounter, int n );
もちろん __declspec(noinline) 指定することを忘れない。

んで、その結果。
最適化前:9.141秒
最適化後:4.860秒

倍近く速くなった。
0471470NGNG
- の行をメンバ変数にくくりだす必要がある。
+ の行をメンバ関数にくくりだす必要がある。
0472デフォルトの名無しさんNGNG
>>464
どんな最適化がかかってその結果になるのか教えてください。
0473デフォルトの名無しさんNGNG
> ループカウンタ用メンバ変数が書き換えられていないことが自明

m_pBuffer = &m_nCounter;
というケースをコンパイラは考慮しなくていいのか?
0474デフォルトの名無しさんNGNG
__declspec(noinline) =関数内部の挙動が分からないわけで、
コンパイラどころか、人手でも勝手に最適化(というか、省略)してはダメだと思うんだが……。
0475デフォルトの名無しさんNGNG
471訂正。
もうちょい調べてみたらSetValueの呼び出し自体が無くなってた。
これじゃ「まともな速度比較が出来ない」どころか、「まったく比較できない」

>>473
すまん。問題なかった。
# さっき試したときは同じ速度になってしまったんだが・・・。
0476デフォルトの名無しさんNGNG
結局のところ小手先の最適化なんぞコンパイラにかかれば無意味ってことじゃないか。
どうやってコンパイラの最適化を抑止するかって話になってるぞ。
0477デフォルトの名無しさんNGNG
int main(){
wstring w = L"あいうえお";

printf("w is %s", wstring.c_str());

}

以上のプログラムを実行すると、めちゃくちゃな文字が表示されます。
これはおそらくprintfがマルチバイト文字(Shift-Jis)に対応したものであると考えられますが、
printfに該当するようなワード文字に対応する関数はないのでしょうか?
0478デフォルトの名無しさんNGNG
>>417
ロケールって具体的には何のためにあるのでしょうか?

wstringを使うには、その国の言語を指定しないと使えないってこと?
0479デフォルトの名無しさんNGNG
>>476
それは飛躍しすぎ。
結論は、>>462のリンク先で最後に書いてある考察が適切。
0480471NGNG
>>473
いや、やっぱり必要だった。
メンバ関数にくくりださないと、最適化後、のやつがrep stosに最適化されてしまって、比較にならない。

>>474,476
事態を混乱させてすまん。m(_ _ )m

SetValue を noinline 指定しないと、ループが消えて rep stos になってしまう。
実際のコードで、これをしてくれればハッピーだが、
これはベンチ用のもっともシンプルなコードで、現実的にはそう期待通りには行かないだろ?

俺らが必要なのは、ブロックフィルの速度ではなくて、メンバ変数のアクセス速度だから
0481デフォルトの名無しさんNGNG
>>477
%lsかwprintfとか。
ロケールも設定しないと駄目かも。
0482デフォルトの名無しさんNGNG
C++歯糞なのですか?
0483デフォルトの名無しさんNGNG
>>481
ありがとうございます!

int main(int argc, char* argv[])
{
locale::global(locale("japanese")); // ★


wstring wstr;
wstr = L"あいうえお";
wcout << wstr << endl;

getch();

return 0;
}

以上のプログラムコードで★の部分をコメントにすると、コンソールに何も表示されないのは、
なんででしょうか?
0484デフォルトの名無しさんNGNG
>>442
http://www.freeml.com/message/[email protected]/0010658
0485デフォルトの名無しさんNGNG
sscanfをistringstreamに置き換えたいんですが、
下記のような場合はどうすればいいですか?

string s = "0:1:2";
sscanf(s.c_str(), "%d:%d:%d", &n, &n1, &n2);


下記のように、charを挟むというのが考えられますが、
':'に限ることは出来ないのでしょうか。

char c, c1;
istringstream(s) >> n >> c >> n1 >> c1 >> n2;
0486デフォルトの名無しさんNGNG
>>485
sscanf()でいいじゃん。
0487デフォルトの名無しさんNGNG
ファイルのオープン,クローズについて意見をください☆

int main(){

  class Log log();

  //ループ
  for(int i=0;i<100;i++){
    /*
    処理
    */
    log.saveLog(i);
   }

  ~log();
  return 0;
}


案1
コンストラクターでfopen(),ディストラクターでfclose

案2
saveLog()で毎回fopen(),fclose

どちらでもいい気がするのですが,気になります!!
クラスの設計としてはどちらが優秀でしょうか?
0488デフォルトの名無しさんNGNG
クラスの設計としてはfstream使った方が優秀です。
0489デフォルトの名無しさんNGNG
文字の幅(setw)や精度(setprecision)を使うとソースが読みにくくなりませんか?
やはりfprintf(pfstr,"%15s,%15.5f","Great Class",someDoubleValue)の方が簡単で(^o^)

0490デフォルトの名無しさんNGNG
fstreamならデストラクタで勝手に閉じてくれるのでfstreamの方が優秀です。
0491デフォルトの名無しさんNGNG
>>487
そのログが、プログラム終了時まで必要のないものならどちらでもいいが、
作業終了時には書き込まれていることを保証しないといけない性質のものなら
毎回オープンクローズした方がいい。
で、streamよりもFILEに慣れているならそちらでもいいと思う。
0492デフォルトの名無しさんNGNG
以下のプログラムコードで★の部分をコメントにすると、コンソールに何も表示されないのは、
なんででしょうか?


int main(int argc, char* argv[])
{
locale::global(locale("japanese")); // ★


wstring wstr;
wstr = L"あいうえお";
wcout << wstr << endl;

getch();

return 0;
}

0493デフォルトの名無しさんNGNG
>>487です
488-491
ご意見ありがとうございましたm(__)m

通常はfstreamを使うのですが,今回はdouble型を多用するため
FILEで,saveLogで毎回open,closeにします
これで私の優秀なクラスがさらに優秀になります☆☆
0494デフォルトの名無しさんNGNG
>>492
コンパイラーは g++ , vc7.1, vc7.0, bc++ or vc6 この中のどれ? 
0495デフォルトの名無しさんNGNG
デストラクタのcloseに任せると、クローズの失敗が美味く処理できないぞ。
0496デフォルトの名無しさんNGNG
クローズなんざ失敗しようがどうでもいい
0497デフォルトの名無しさんNGNG
>>496
クローズの失敗だけならいいが、fclose()はバッファのフラッシュもするから要注意。
なんてことは当然承知の上で言ってるんだよね?
0498デフォルトの名無しさんNGNG
fopenは失敗しても,fcloseが失敗するとは思えませんが,,,
0499デフォルトの名無しさんNGNG
fcloseの戻り値使ってるプログラム見たこと無いな・・・
0500デフォルトの名無しさんNGNG
仮に失敗したとして、ひ弱な人間どもにはどうすることもできまい。
0501>>492NGNG
>>494
vc6です!
0502デフォルトの名無しさんNGNG
>>498
リムーバブルディスクでメディア引き抜かれた場合とか、あとはメディア
不良で一部セクタに書き込めない場合。たいてい OS やライブラリが
バッファリングしてるから fwrite() は成功しちゃう。
0503デフォルトの名無しさんNGNG
おいおい、大丈夫かよお前ら。書き込み後のfclose()の戻り値チェックしないなんて有り得ねぇよ。
0504デフォルトの名無しさんNGNG
やべー
0505デフォルトの名無しさんNGNG
チェックするヤツの方がすくねぇよ
0506デフォルトの名無しさんNGNG
>>505
まぁ、用途によるよな。

別にファイル壊れてても構わん状況ならチェックしないだろうし、
定期バックアップを行うアプリを書いてるならチェックしないのは
論外。

俺もあまりチェックしてない。
0507デフォルトの名無しさんNGNG
わざわざ書き込み後のfclose()の戻り値チェックするなんて有り得ねぇよ
0508デフォルトの名無しさんNGNG
>>503が煽ってるだけなのか、まともなPGならチェックしてるのかどっちだ?
0509デフォルトの名無しさんNGNG
これだけの情報がそろってチェックしないやつの気が知れない。
今まで自分の書いたノーチェックなコードを正当化したいだけなんだろ。
いいんだよ、これから気をつければ。
0510デフォルトの名無しさんNGNG
fstreamは閉じるのに失敗したときどうなるの?
いや、C++スレだしさ、いちおう。
0511デフォルトの名無しさんNGNG
>>510
closeに戻り値有るよ。
ついでに badbit だか failbit だか立つよ。
0512デフォルトの名無しさんNGNG
closeに失敗したらどうすりゃいいですか
0513デフォルトの名無しさんNGNG
>>511
でも普通はデストラクタで勝手に閉じてもらうわけで
0514デフォルトの名無しさんNGNG
エラーコードを見てから考えろ。
0515デフォルトの名無しさんNGNG
fcloseの戻り値をチェックすればそれで書き込みが保証されると思ってる
バカがいるスレはここですか?
0516デフォルトの名無しさんNGNG
>>513
普通?エラーを検知できない方法がどうして普通だと言い切れるのかね?
0517デフォルトの名無しさんNGNG
>>515 エスパーキター
0518デフォルトの名無しさんNGNG
エラーを検知できることの大切さを知らない>>515は学生。
0519デフォルトの名無しさんNGNG
普通もう一回読んでベリファイ
0520デフォルトの名無しさんNGNG
>>519
一回で安心するやつは素人
0521デフォルトの名無しさんNGNG
だれだこんなに雑魚が群がる餌撒いたやつは
0522デフォルトの名無しさんNGNG
ネタかマジか解からなくなってきたのでageときますね
0523495NGNG
俺だよ。俺オレ
0524デフォルトの名無しさんNGNG
>>523
誰だよ、お前。
おれだよ
0525デフォルトの名無しさんNGNG
とりあえず示談金の前払いで500万円振り込んでおいてください
0526デフォルトの名無しさんNGNG
オレはチェックしねーよ。チェックしても、その後どーしよーもねぇじゃん。
0527デフォルトの名無しさんNGNG
エラーメッセージくらい出せるだろ
0528デフォルトの名無しさんNGNG
そこまで厳密にやりたいなら、CRTなんか使わずシステムコール直に発行しろよ。
0529デフォルトの名無しさんNGNG
書き込んだフリしてエラーが出てても黙ってるアプリはいやだな・・・
0530デフォルトの名無しさんNGNG
書き込んだフリしてエラーが出てても黙ってるのがCRT
0531デフォルトの名無しさんNGNG
>>530
え?どういうこと?
0532デフォルトの名無しさんNGNG
Cathode Ray Tube だったら輝点の一つや二つ欠けててもmおndawe
0533デフォルトの名無しさんNGNG
おい、Cathode Ray Tube の輝点をヴェリファイできんぞ
0534>>492NGNG
誰か答えてください!
環境はVC6です。
0535デフォルトの名無しさんNGNG
>>534
ユニコードを使用するようにオプション変更してみると
ロケール設定しなくても動くかもよ。
ただの勘だけど。
0536デフォルトの名無しさんNGNG
うごかないし、そういうもんだ。
通常のロケールはjapaneseではなくCだし
0537デフォルトの名無しさんNGNG
>>536
通常のロケールがCだというのはわかりましたが、
なんで、それで表示されないんですか?

そもそもロケールってなんあんでしょうか?
0538デフォルトの名無しさんNGNG
ロケールって、わざわざワイド文字列の有効性をチェックするの?
例えば、Windowsだと WriteConsoleW() にそのまま流し込めば表示されると思うんだが、
ロケールに合わない文字を取り除く処理が入るってこと?
0539デフォルトの名無しさんNGNG
>>637
お前無能の極みだな
少しは自分で調べろよ
0540デフォルトの名無しさんNGNG
×>>637
○>>537
0541デフォルトの名無しさんNGNG
>>537
そういう仕様だから。VC6は。
0542sageNGNG
>>539
ワラタ
0543デフォルトの名無しさんNGNG
>>539
体をはったギャグですね(プッゲラ
0544デフォルトの名無しさんNGNG
WriteConsoleWはすべてのプラットフォームでサポートされているんだ。
0545デフォルトの名無しさんNGNG
streamに対してprintf書式指定使いたかったらboost使えばええやん。
0546デフォルトの名無しさんNGNG
>>545
C++ではprintfは全部cout<<で置き換えるべきなのですか?
0547デフォルトの名無しさんNGNG
そうすべきだね
0548デフォルトの名無しさんNGNG
でもscanfはcinで置き換えられないhホ
0549デフォルトの名無しさんNGNG
>>548
自前でどうにかしたほうがscanfよりまだましだと思うが。
0550デフォルトの名無しさんNGNG
printf と sprintf の関係みたいに
文字列も stream と同じ様に扱うにはどうすればいいですか?
0551デフォルトの名無しさんNGNG
>>550
stringstream
0552デフォルトの名無しさんNGNG
>546
どうでもいいと思う
0553545NGNG
いや、その、ごめん。ネタだったんだ。そんなに食いつかないで。
0554546NGNG
あわわ。>>553の名前は間違いです。546です。
0555デフォルトの名無しさんNGNG
>>549
自前でscanf作るのと何か違うのか?
0556デフォルトの名無しさんNGNG
C++でのscanfのような危険どころを教えてください。
0557デフォルトの名無しさんNGNG
scanf
0558デフォルトの名無しさんNGNG
型安全じゃない事とか
0559デフォルトの名無しさんNGNG
型クルクルパーな奴が使う限り同じ
0560デフォルトの名無しさんNGNG
低脳のフリをすることを、自分が本当に低脳なことの隠れ蓑にする害獣ども
0561デフォルトの名無しさんNGNG
Rubysaikyou !!!!!!!!!!!!!!!!!!!!!!
0562デフォルトの名無しさんNGNG
正直、C++に型安全なんか期待していない
0563デフォルトの名無しさんNGNG
C++ で無名関数がサポートされるのはいつになりますか?
0564デフォルトの名無しさんNGNG
明日
0565デフォルトの名無しさんNGNG
明日という名の永遠
0566デフォルトの名無しさんNGNG
>>563
boost::lambdaでも使っとけ
0567デフォルトの名無しさんNGNG
>>566
重い
0568デフォルトの名無しさんNGNG
>>567
そうでもない
0569デフォルトの名無しさんNGNG
>>567 コンパイル時間の話だよな?
0570デフォルトの名無しさんNGNG
boostは標準ではないのでまだ使いたくない。
→自分で実装するか。
0571デフォルトの名無しさんNGNG
→自分で実装してドツボ
→やっぱboost使うか
0572デフォルトの名無しさんNGNG
そんなこたぁない
0573デフォルトの名無しさんNGNG
自分で実装するぐらいならboostだろ
0574デフォルトの名無しさんNGNG
STLにもファンクションオブジェクトならある。
0575デフォルトの名無しさんNGNG
>>569
他に何があんだよ
0576マイク ◆yrBrqfF1Ew NGNG
C++はtype safeで最高だな。
0577デフォルトの名無しさんNGNG
boost本もけっこう重いね
0578Ruby!!!!!!!!!!!!!!!!!!NGNG
糞本だろ。アレ
0579デフォルトの名無しさんNGNG
>>578
糞本いいながら買ってるのか。
0580デフォルトの名無しさんNGNG
>>579
買ったから糞本だと解かるんじゃないの
0581デフォルトの名無しさんNGNG
クラス内でループ処理が必要でx[3]の様に配列を作成しているのですが、
クラス外からは、abc.aやabc.bの様に参照したいと思っています。

現在は
class abc{
    int x[3];
public
    int *a,*b*,c;
};
abc::abc()
{
    a=&x[0];
    b=&x[1];
    c=&x[2];
}
の様に書いているのですが、これだと*abc.aとしないといけません。
処理スピードを落とさずに、abc.aでアクセスできるようにする方法はないでしょうか。
0582デフォルトの名無しさんNGNG
>>581
どうしても、どっちかからのアクセスは間接参照になる(けど、本当に遅くなるか?)。
あと、配列の方を実体とするなら、公開用の変数はポインタではなくて参照にするのが普通だと思います。
0583デフォルトの名無しさんNGNG
public:
 int &a, &b, &c;

abc::abc()
 : a(x[0]), b(x[1]), c(x[2])
0584デフォルトの名無しさんNGNG
そこでunionですよ。

>>582
コンストラクタがinlineじゃ無いと a, b, c が何をさしてるのか外からはわからないから最適化とかに影響を与えると思う。
ポインタの場合も同じ話だが。
0585デフォルトの名無しさんNGNG
>>584
unionだと、規格で保証されている訳じゃないから微妙に不安。
組み込み系とか、ポータビリティを意識しない場合にはやるけど。

そもそも変数を公開している時点で、最適化する時にはクラスabcを知らなきゃできない、と思う。
0586デフォルトの名無しさんNGNG
>>585
unionは、ISO標準C++では保証されてないの?
0587デフォルトの名無しさんNGNG
こういう使い方は保証されてない
0588デフォルトの名無しさんNGNG
>>586
メモリ配置がどうなるかは保証されてません。
でもま、実際ほとんどの環境で予想通りに動くと思うけどね。
0589デフォルトの名無しさんNGNG
>581
関数じゃだめなの?
int &a() {return x[0];}
0590デフォルトの名無しさんNGNG
>>581
つーかそういう時こそテンプレでしょ
public:
  template<int i>
  int Ret() const { return x[i]; }
0591デフォルトの名無しさんNGNG
えー?
0592デフォルトの名無しさんNGNG
>>590 それどうやって使うつもりヨ
0593デフォルトの名無しさんNGNG
>>592

int main()
{
 abc a;
 std::cout << a.template Ret<1>() << std::endl;
}
0594デフォルトの名無しさんNGNG
というかtemplateは不要だったスマソ
0595デフォルトの名無しさんNGNG
>>587-588
勉強になりますたー
0596デフォルトの名無しさんNGNG
char *p=
でchar配列の先頭にポインタを合わせた後、
*pからこのchar配列の長さを知る方法を教えてくれないと泣きます。
教えてくれると喜びます。
0597デフォルトの名無しさんNGNG
char*だけ渡されてそんなの出来るわけねーだろアホか
0598デフォルトの名無しさんNGNG
>597
ありがとうございます。
三度の飯より喜んでおります。大体8飯くらいです。
0599デフォルトの名無しさんNGNG
>>596-598
なぞはすべて解けた。自作自演だな。
0600デフォルトの名無しさんNGNG
>>523
おれおれ詐欺
0601デフォルトの名無しさんNGNG
もうstrcatなんてうさんくさいものは使わないでマロックで自分で結合する!
0602デフォルトの名無しさんNGNG
>>596
template <int N> int Hoge(char (&foo)[N]) {
char (*p)[N] = foo;
return sizeof *p;
}
0603デフォルトの名無しさんNGNG
>>601
それ、C++じゃないし。
0604デフォルトの名無しさんNGNG
>>603
0605デフォルトの名無しさんNGNG
>>605
0606デフォルトの名無しさんNGNG
>>601( ´,_ゝ`)プッ
0607デフォルトの名無しさんNGNG
あほばっかだな
0608デフォルトの名無しさんNGNG
まあ2chには色んなレベルの香具師が来るからな
0609デフォルトの名無しさんNGNG
なんだよ2匹だけか
0610デフォルトの名無しさんNGNG
メンバ変数の初期化順序なんですが

class A
{
public:
A(int a) : a_(a), b_(a*2), c_(b_*2) {}

const inta_, b_;
const intc_;
};

だと意図通りに初期化がされるのですが、c_の宣言をa_, b_の前に持ってくるとc_の値がおかしくなります。
初期化順が、コンストラクタの : 以降(イニシャライザって言うんでしたっけ?)の初期化順に関係なく
宣言順に依存しているからだと思うのですが、これは規格で決められているのでしょうか?
0611デフォルトの名無しさんNGNG
>>610
決まってる。初期化は宣言された順序で行われる。
0612デフォルトの名無しさんNGNG
>>610
そうです
0613デフォルトの名無しさんNGNG
>>610
つEffective C++, Exceptional C++
0614610NGNG
>>611-613
ありがとうございます。
>つEffective C++, Exceptional C++
C++やる人には必須なんでしょうけど…なかなかいい値段ですね…(´・ω・`)

あと、>>610のclass Aのようにあるメンバ変数が他のメンバ変数に依存している設計はどうなのでしょうか?
constが無ければコンストラクタの{ }内で順番に初期化すればいいのですが
constが付いていると : の所でしか初期化の機会がありませんよね。
そうすると宣言順が重要になって、うっかり変えてしまうと…
こういう設計は良くないのでしょうか?
0615デフォルトの名無しさんNGNG
うん、設計がよくない気がする。
0616デフォルトの名無しさんNGNG
やっぱりクソ言語だな
0617デフォルトの名無しさんNGNG
>>614
ここまでの情報だと、実際のデータメンバはひとつにして、
おとなしくメンバ関数で値を返すようにするのが正解なんだろうな。
0618デフォルトの名無しさんNGNG
const_cast して代入しちゃえば?
0619デフォルトの名無しさんNGNG
>>614
必須じゃない
そんな値段で引いていたら本当に必須の本(PDF)が買えない
0620デフォルトの名無しさんNGNG
>>613
「つ」ってよくみるけど、どういう意味があるの?
0621デフォルトの名無しさんNGNG
つーか(ていうか)の略
0622デフォルトの名無しさんNGNG
( ・∀・)つ
これの手だろ。
0623デフォルトの名無しさんNGNG
>>620
手
モナー、ギコなど、猫の手であることが多い
0624デフォルトの名無しさんNGNG
いや↓の「つ」の部分でしょ

(・∀・)つ
0625デフォルトの名無しさんNGNG
性器か?
0626デフォルトの名無しさんNGNG
>>619
必須の本(PDF)って何です?
0627デフォルトの名無しさんNGNG
マジレスすんなカスども
0628デフォルトの名無しさんNGNG
>>626
ぐぐれ
0629デフォルトの名無しさんNGNG
>>626
14882
0630626NGNG
>629
あれは$18だから買えないってことはないような・・・
0631デフォルトの名無しさんNGNG
数万円はする
0632デフォルトの名無しさんNGNG
>>5
0633デフォルトの名無しさんNGNG
>>632
あれって合法なの?
0634デフォルトの名無しさんNGNG
んなわけねーべ
0635デフォルトの名無しさんNGNG
http://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS%2FISO%2FIEC+14882%2D2003
$18.00だってば
0636デフォルトの名無しさんNGNG
>>635
本当だ。安くなったな〜
0637デフォルトの名無しさんNGNG
5のはFinal Draftで著作権が発生していない版だから合法・・・のはず・・・
0638635NGNG
>>5のPDFは違法。PDFじゃない方はFinal Draftなので合法。
ちなみに>>5のISOで買うよりも何故か>>635のANSIで買ったほうが安い。
内容は同じらしい。
0639デフォルトの名無しさんNGNG
0 == 0 で返される値って何型ですか?
bool?int?
0640デフォルトの名無しさんNGNG
>>639
cout << (typeid (0 == 0) == typeid (bool)) << endl;
0641デフォルトの名無しさんNGNG
>>640って規格?環境依存?
0642デフォルトの名無しさんNGNG
>>641
640の何が?

#include <typeinfo>
か?
0643デフォルトの名無しさんNGNG
>>642
結果でしょ。
VC++6だとtypeid(0==0).name()がlongだったり
0644デフォルトの名無しさんNGNG
マジ!?
g++(3.3.4)でbool
0645デフォルトの名無しさんNGNG
このへん?
13.6 Overloading
12 For every pair of promoted arithmetic types L and R, there exist candidate operator functions of the form
LR operator*(L, R);
LR operator/(L, R);
LR operator+(L, R);
LR operator-(L, R);
bool operator<(L, R);
bool operator>(L, R);
bool operator<=(L, R);
bool operator>=(L, R);
bool operator==(L, R);
bool operator!=(L, R);
where LR is the result of the usual arithmetic conversions between types L and R.
0646デフォルトの名無しさんNGNG
>>645
当たり前っていったら当たり前な結果だな。うん。
0647デフォルトの名無しさんNGNG
どっちでも困らないが
0648デフォルトの名無しさんNGNG
オーバーロードの解決とか、template引数の推測とか、意味を持ちそうなところはいくらか思い当たるな。
0649デフォルトの名無しさんNGNG
int変数を都合よくchar配列に入れてくれる関数って無いんですか?
検索の仕方が悪いのか、別なのが出てきます。
int 100を元に、
char c[]="100";のchar配列と同等の結果を返す関数です。
0650デフォルトの名無しさんNGNG
>>649
snprintf() でドゾ。
0651デフォルトの名無しさんNGNG
>>649
const char *でいいんだったら
boost::lexical_cast <string> (100).c_str ();
とかもあるけど
配列だとコンパイル字に10進での桁数を求めないといけないんだよね
0652デフォルトの名無しさんNGNG
>>610の初期化順序の仕様のメリットを教えてください。
0653デフォルトの名無しさんNGNG
もしくは、そんな仕様になってしまった理由を教えてください。
0654デフォルトの名無しさんNGNG
ムシャクシャして決めた。
順番なら何でもよかった。
今は反省している。
0655デフォルトの名無しさんNGNG
>>649
非標準だけど_itoa
0656デフォルトの名無しさんNGNG
>>655
そんなあなたにも
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa2.html
0657デフォルトの名無しさんNGNG
コンストラクタで昇順、デストラクタで逆順に破棄されるほうが都合がいいから。

親子関係のあるオブジェクトを同時に持つ場合に、親が先に死んだら困る場合もあるだろ。

これが初期化パラメータ順に破棄する仕様にすると、初期化の順序をオブジェクトごとに
記憶しなければいけない。
実際にやるとしたら使用したコンストラクタを一個覚えとくだけだと思うが、かなり無駄。
0658デフォルトの名無しさんNGNG
親子なら子を殺すのは親の義務ではないのですか
私が直接殺すのは親だけではないのですか
0659デフォルトの名無しさんNGNG
std::stringに格納されたアルファベットの文字列を大文字が含まれていれば小文字にしたいのですが
(e.g. This→this)、どうすればいいでしょうか?
0660デフォルトの名無しさんNGNG
char character;
if (charcter <= 'A' && character >= 'Z')
 charcter = character + 0x20;
0661デフォルトの名無しさんNGNG
>>659
for (size_t i=0; i<s.size(); ++i) {
if (isupper(s[i])) s[i] = tolower(s[i]);
}
0662デフォルトの名無しさんNGNG
>>659
string str="Hello, World!";
transform(str.begin(), str.end(), tolower)
0663デフォルトの名無しさんNGNG
transformだと日本語がダメ
0664659NGNG
>>660-662
ありがとうございます。1ヶ月かかって作ったショボいアプリがこれで完成します。
0665デフォルトの名無しさんNGNG
>>662-663
そこでファンクタですよ
0666デフォルトの名無しさんNGNG
すみませんが質問させて下さい。

vc6.0+win32環境です。

ツールバーをカスタムドローしてボタンのアイコンを書いています。
NM_CUSTOMDRAWメッセージを処理してNMCUSTOMDRAWのRECTメンバ
からアイコンの位置を取得する時に、ドロップダウンを持つボタンのみ
縦の位置がずれてしまいます(XP環境でテーマ(manifest)を置いている時に限りです)。

何方か位置がずれない方法を知りませんでしょうか?
よろしくお願いします。


0667デフォルトの名無しさんNGNG
>>666
適切なスレに行って聞き直せ。
0668デフォルトの名無しさんNGNG
>667
そうします。
0669デフォルトの名無しさんNGNG
>>661
tolowerは英大文字でなければなにもしないことになっているからifは不要。
0670デフォルトの名無しさんNGNG
>>669
マジで?
知らなかった
0671デフォルトの名無しさんNGNG
>>670
大文字じゃなかった場合どうなると思ってたんですか
0672デフォルトの名無しさんNGNG
>>671
知りたいか?あ?
0673デフォルトの名無しさんNGNG
>>663
>>659は「アルファベットの文字列」と言っているんだから別に
いいとは思うが、transformでダメなら自分でループ回しても
ダメなんではないか?普通はtransformも中でループ回してる
わけだし。
0674デフォルトの名無しさんNGNG
>>669
かきこんでからきづいた
0675デフォルトの名無しさんNGNG
>>673
いまさらだけど、transformの第3引数にstr.begin()いれるの忘れてた。

std::wstringにしようよ
0676デフォルトの名無しさんNGNG
今時wstringなんてダレも使ってねーよ
0677デフォルトの名無しさんNGNG
>>673
自前のループなら、
前が日本語の1バイト目ならっていう部分を追加すればいいんだけど、
transformじゃそれが出来ないってことなんだろう。
で、それを受けて、
前が日本語の1バイト目であることを保存できるファンクタを使え、
というのが、>>665なんだと思う。
0678デフォルトの名無しさんNGNG
使いまくってるが
0679デフォルトの名無しさんNGNG
fstream系がファイル名にwchar_t cosnt*を受け取れないからなぁ。
なんか片手落ち。
0680デフォルトの名無しさんNGNG
wstringってちょっと環境依存なところもあるよね。
0681デフォルトの名無しさんNGNG
stringもバリバリ環境依存だと思うが
0682デフォルトの名無しさんNGNG
UNIX上のgccなんかだとのっけからstd::wstringのtypedefがコメントアウトされてたりとかな…
0683デフォルトの名無しさんNGNG
MBCS対応basic_stringってありますか?
reverseとかfindが日本語混ざるとだめぽ。
0684デフォルトの名無しさんNGNG
CJK問題とか欧米の人々はアスキー以外どうでもいいと思ってるからなぁ
0685デフォルトの名無しさんNGNG
>>665,677
25.2.3 Transform -2
Requires: op and binary_op shall not have any side effects.
0686デフォルトの名無しさんNGNG
>>683
と言うことで、自分で作るしかない。
0687デフォルトの名無しさんNGNG
VC++でmbstring.hってあるじゃないですか、
あれって、MSの勝手な拡張なんですか?
CRTがjapanese-awareになって素敵なんですが。
あと、TCHARとか。
0688デフォルトの名無しさんNGNG
マイクロソフトはすげえ会社なんだよ
0689デフォルトの名無しさんNGNG
>>687
その通り。
0690デフォルトの名無しさんNGNG
>>683
MBCS仕様のchar_traitsを自作してみたらどう?

>>687
MSの独自拡張。但しBCCでも結構使える。
0691デフォルトの名無しさんNGNG
MBCS対応のchar_traits作るのってまず無理だろ。
結局内部はwchar_tで入出力時に適宜変換しかない。
0692デフォルトの名無しさんNGNG
template <class T>
void destroy( T* p )
{
    p->~T();
}

template <class FwdIter>
void destroy( FwdIter first, FwdIter last )
{
    while( first != last )
    {
        destroy( &*first ); // 1
        ++first;
    }
}

なんですが、1 の所は destroy( first ); とするのじゃダメなのでしょうか?
0693デフォルトの名無しさんNGNG
ぽいんたじゃないから
0694デフォルトの名無しさんNGNG
>692
イテレータが渡される可能性があるので,&*でポインタを取得する必要があります.
(ポインタが渡された場合,&*は意味なし)
0695デフォルトの名無しさんNGNG
あ,ポインタもイテレータのモデルの一つか.

誤:イテレータが渡される
正:ポインタでないイテレータが渡される
0696デフォルトの名無しさんNGNG
>>691
んじゃー、サロゲートペアなんか考えるとUTF対応も不可能だし
C++の文字列クラスは実質ASCIIとUCS4専用で使い物にならないでFAなのか?
0697デフォルトの名無しさんNGNG
>>696
べつに ISO-2022 系列でも構わんが。いずれにしても固定長じゃないと
難しい気はする。
0698デフォルトの名無しさんNGNG
basic_stringのMBCS対応って、メンバ関数だけの問題なんじゃないの?
std::stringを継承して、
findとかreverseとかの、MBCS時に問題になるメソッドをオーバライドすりゃーいいだけのように思えるんだけど。
char_traitsは関係無いって言うか。

的外れなこと言ってたらごめんなさい。
0699デフォルトの名無しさんNGNG
ネット上か書籍でC++におけるマルチバイト文字列(+locale)の扱いに関する
良いリファレンスご教授願えませんか?英語でも構いません.
(もしかしてそんなもの無い?)
0700デフォルトの名無しさんNGNG
stringは継承しない方が・・・
0701デフォルトの名無しさんNGNG
char_traits は設計的にマルチバイトに対応できないというの結論でよろしいのか?
……数多の文字列クラスが巷に溢れているのも仕方なしだな。
0702デフォルトの名無しさんNGNG
Shift_JIS/CP932ならまだ16bit化とかいう冗談があるがEUC-JPやISO-2022-JPはそれも無理だからな。
0703デフォルトの名無しさんNGNG
UTF-16のサロゲートなしで行こう
0704デフォルトの名無しさんNGNG
>>701
文脈依存のバイト列を扱うために char_traits<T>::state_type っつー型が
定義されてるみたいだけど、これだけだと道具不足なの? どう使われてるか
調べてないので、何とも言えんが。
0705ああああNGNG
wstring word = L"あいうえお";

とした場合に、wordには何かしらの文字コードが入ると思うのですが、
たとえば、UTF-16だとして、そのことはどこをみればわかりますか?
0706デフォルトの名無しさんNGNG
>>705
自前でコード判定をするしかない。スレ違い。
【UTF8】文字コード変換【SJIS】
http://pc5.2ch.net/test/read.cgi/tech/1063177450/
0707>>705NGNG
>>706
いや・・・全然スレ違いではないと思うのですが・・・

ようは、wstringあつかうときに、文字コードの何を使うかを何処で決定しているかを知りたい。
たとえば、それが環境変数で設定されている値だとか、何かの設定ファイルがあるとか・・・
windowsとunixでは、決定の仕方が違うとか・・・そういうこと。
0708デフォルトの名無しさんNGNG
マニュアルだろ
0709706NGNG
>>707
いや、スレ違い。なぜならば、文字コードはC++規格に含まれていない。
0710デフォルトの名無しさんNGNG
規格にないboostの話をする奴らの立場は
0711デフォルトの名無しさんNGNG
>>709
強情な人だな...
わからないなら、わからないといえばいいのに...

0712デフォルトの名無しさんNGNG
localeconv
0713デフォルトの名無しさんNGNG
>>707
決定とか、そういうの無いから
0714デフォルトの名無しさんNGNG
>>707
氏ね
0715デフォルトの名無しさんNGNG
テンプレートを勉強中なのですが、以下のコードがVC++.NET2003上でうまくコンパイルできません。
エラーの原因を教えていただけませんか?
#include <iostream>
#include <string>
template<class stringT>
class test {
private:
stringT str_;
public:
test(stringT str) : str_(str) {}
stringT::size_type get_str(){
return str_.find("e", 0);
}
};
int main() {

test<std::string> str("test");

std::cout<<str.get_str()<<std::endl;

return 0;
}
これをコンパイルすると以下のようなエラーメッセージが出ます。

warning C4346: 'stringT::size_type' : 依存名は型ではありません。
error C2146: 構文エラー : ';' が、識別子 'get_str' の前に必要です。
warning C4183: 'get_str': 戻り値の型がありません。'int' を返すメンバ関数とみなします。
0716デフォルトの名無しさんNGNG
-stringT::size_type get_str(){
+typename stringT::size_type get_str(){
0717デフォルトの名無しさんNGNG
>>716
あ!そんな簡単なことだったのですね。
どうもありがとうございます^^
0718デフォルトの名無しさんNGNG
>>705
c_str()やbegin()から順にたどっていくのは?
0719デフォルトの名無しさんNGNG
>>718
ha?
0720デフォルトの名無しさんNGNG
hi?
0721デフォルトの名無しさんNGNG
ho?
0722デフォルトの名無しさんNGNG
がるぽ
0723デフォルトの名無しさんNGNG
>>722
ヌッ
0724デフォルトの名無しさんNGNG
ぬるッ
0725デフォルトの名無しさんNGNG
>>724
ガぽ
0726デフォルトの名無しさんNGNG
>>715
別にテンプレートの勉強するのはいいけれども、それは何かの
役に立つのかな…

template <typename charT>
class test {
private:
std::basic_string<charT> str_;
…

とかならまだ分かるが…
0727デフォルトの名無しさんNGNG
>>726
std::string::size_typeって例えばfindメソッドなどの引数の型になっているね。
これは大抵size_t型がtypedefされているものだけど、Alphaマシン
とかだと必ずしもsize_tとは限らないからstd::string::size_type
で宣言するんだよ。
0728デフォルトの名無しさんNGNG
>>727
そういう話ではないんじゃ
0729デフォルトの名無しさんNGNG
>>726
そんなこと言ったら、 CharTraits や Allocator も引数に追加しないといけないんじゃないの?
0730デフォルトの名無しさんNGNG
>>729
             ,. - ─── - 、
             /    ,       `ヽ.
            /〃//,. ,ィl/|l ト、 !、 、  ヽ
          ー'´| | l |1 | !l. l| ! | l.|ヽ ! !、 ',
             YレV!ヒエ「! |l.「_ト!Ll」| l l  l
           ! lハイJ |  ´|_jヽ. リ,! ! l. l |
             |l |l.} ー ,   L _,ハl.lトl l. | l
             |l ilト、   n  ''  ,1l|ィ| |l l |   パパ、大丈夫だよ♥
           _ 二,ニ^tュ--ェ_t1」l.|l !リ|_lノ   
       r7´   f r┐| 〔/ミヽ>,-、 ̄´
       Y       ー个‐'t  ハ-、_'ゝ、
        ヽ ._・ rく ̄ヽト-'丿  ヽ l
        / (・__,)ゝi┬'´ハ`     '`|
          |ヽ, イ   ノ┴くヽヽ、    /
        `´ ゝ┬ヘ`ヽ   |  `ー‐1
           ゝノ-‐^ー'一''丶  ヽ ヽ
           ト、_       `ーァ'¨不ヽ
            | | 「 ̄「 ̄l ̄ト、,イトヒi′
             l l. l   l  !  !└' l |
             └ L 」_,|__l_l.__L.l′
             |   |  |   |
              l   l   !   !
                l   l.   l   l
            ト--┤   !--‐1
              f‐t央j.   ト央ァヘ
              |  甘l、  / 甘  |
             l  ,.-‐ヽ レ'⌒ヽ/
            `く.__ ノ ゝ--‐′
0731デフォルトの名無しさんNGNG
>>730
ハァハァお嬢ちゃんの臭いオシッコ飲みたい!!
(;´Д`)ハァハァハァ
0732726NGNG
>>730-731
言語系のスレでそういうのはやめてくれ、吐き気がする。

>>729
いや、まぁ、現実的にはそうなるかもしれないけれども、
例としての良さの問題だから。
0733デフォルトの名無しさんNGNG
別にstringをテンプレート引数にしても全然おかしくねーよタコ
0734デフォルトの名無しさんNGNG
>>733
いや、そういう話ではないだろう。
0735デフォルトの名無しさんNGNG
>>734
どういう話なの?
0736デフォルトの名無しさんNGNG
放置しろよ
0737デフォルトの名無しさんNGNG
basic_stringをテンプレート引数にする意味がないからだろ。
string・wstring以外で同じメンバ関数をもったクラスなんてあまりないし、
そもそもテンプレートじゃなくて派生させるだろうし。
0738デフォルトの名無しさんNGNG
>>737
どうやってメソッドの引数や戻り値の型が異なるクラスを
派生でキレイに実現するのかぜひ教えてください。
0739デフォルトの名無しさんNGNG
仮想デストラクタをもたないクラスから派生するのはちょっと・・・
0740737NGNG
>>738
まずは、basic_stringと酷似するメソッドを持つクラスを
「string/wstringとその派生」以外で提示して頂いた方が良いでしょう。

そんなわけで、
私めはここにて縄を持って待ち伏せ致しますので、
>>738さんは屏風から虎を追い出してください。
0741デフォルトの名無しさんNGNG
自分が間違った事を言ったことぐらい素直に認めろよ
0742デフォルトの名無しさんNGNG
だから放置しろっつったのに
0743デフォルトの名無しさんNGNG
>>739
PODだけ持たしとけば問題ない。
0744デフォルトの名無しさんNGNG
>>743
ポインタを持ってたら?
0745デフォルトの名無しさんNGNG
さがりすぎ
0746デフォルトの名無しさんNGNG
std::stringを使用してSQLクエリを組み立てているんですけど

std::string s;

s += "SELECT ";

s += "COL";

s+= "FROM";

とかやってると効率が悪い感じです

stringstream?とか使うと効率はアップするんでしょうか
0747デフォルトの名無しさんNGNG
C++以前の問題。
パラメータ付きクエリを使ってない以上、何やっても効率は最低。
0748デフォルトの名無しさんNGNG
sprintfか、boost::format とか。
0749デフォルトの名無しさんNGNG
sprintf(s, "SELECT %s FROM %s", "col1, col2", "table");
0750デフォルトの名無しさんNGNG
>>749
御社では包括的sprintf使用禁止条約に調印してないんですか?
0751デフォルトの名無しさんNGNG
snprintf にして、戻り値もチェックすれば OK?
0752デフォルトの名無しさんNGNG
文字の前に@を付けるにはどうしたらいい?

例えば
こんにちは
おはよう
と書き込んで変換したい場合

@こんにちは
@おはよう
見たいな感じで開いてるTXTファイルに書き込み

C++でサンプルソース作って下さい。
0753デフォルトの名無しさんNGNG
>>752
こっちのほうが適切では?
【初心者歓迎】C/C++室 Ver.10【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1097416187/
0754デフォルトの名無しさんNGNG
>>752-753
自演乙
0755752NGNG
自己解決しますた。

0756デフォルトの名無しさんNGNG
次スレからGotWをテンプレに加えないか?
http://www.gotw.ca/
0757デフォルトの名無しさんNGNG
Stroustrup が禿なら、Sutter は髭だな
0758デフォルトの名無しさんNGNG
Sutter はあんまり話題にあがらないけどな
0759デフォルトの名無しさんNGNG
去ったんだろ
0760デフォルトの名無しさんNGNG
この秋一番の寒波
0761デフォルトの名無しさんNGNG
>>759
>>759
>>759
>>759
0762デフォルトの名無しさんNGNG
Scott Meyersはフサフサか
0763デフォルトの名無しさんNGNG
>>759
おもしろい
0764デフォルトの名無しさんNGNG
>>763
>>763
>>763
>>763
0765デフォルトの名無しさんNGNG
>>762
フサフサ過ぎるくらいだな
ttp://www.aristeia.com/images/sdm-big.jpg
0766デフォルトの名無しさんNGNG
まつもと >>>>>>>>>>>>>>>>>>>>> ScottMeyeyeyers
0767デフォルトの名無しさんNGNG
だれ、まつもとって?
0768デフォルトの名無しさんNGNG
松本コンチータだろ
0769デフォルトの名無しさんNGNG
>>759はこの秋一番の豊作
才能を感じる

世界の中心で
愛を酒奉行
0770デフォルトの名無しさんNGNG
Scott Meyersってもっと年食った人かと思ってたよ。ちょっとビックリ。
0771デフォルトの名無しさんNGNG
おいらもびっくり
0772デフォルトの名無しさんNGNG
ブラウンがお気に入りなんですな
07735NGNG
ifsream in("test.dat");
string line;

while( !in.eof() )
{
getline(in, line);
if( lineが1個以上の空白文字のみからなるとき飛ばす条件 ) continue;

}

のようにtestファイルから行単位で読み込む時、1個以上の空白文字
のむを含む行の処理をとばすにはどうすればいいのでしょうか?
0774デフォルトの名無しさんNGNG
>>773
line.find_first_not_of(' ', 0) == std::string::npos
0775デフォルトの名無しさんNGNG
>>773
if (find_if (line.begin (), line.end (), bind2nd (not2 (equal_to <char> ()), ' ')) == line.end ())
かな?
0776775NGNG
>>774
へぇ〜そんなメンバ関数があったんだ
0777デフォルトの名無しさんNGNG
>>776
実はさっきちょうどトーカナイザの実装をしていて、そのメソッドの文字列を
タイピングしていたところだったりする。
0778773NGNG
test.datが秀丸からみて
sum 5.0 3.0↓
sub 3.0 5.0↓
sum 4.0 2.0↓
sub 3.0 12.0↓
[EOF]
の場合はうまくいくんですが
sum 5.0 3.0↓
sub 3.0 5.0↓
sum 4.0 2.0↓
sub 3.0 12.0↓
↓ ここに関連する処理をお二人に教えてもらった方法で飛ばせるかどうかやったのですが駄目でした。
[EOF]

根本的に実装方法が悪いのかな

0779デフォルトの名無しさんNGNG
>>778
それ「1個以上の空白文字」ないじゃん
0780デフォルトの名無しさんNGNG
>>778
while(getline(in, line))
{
if (line.find_first_not_of(' ', 0) == std::string::npos)
continue;
}
0781773NGNG
>>779
sum 5.0 3.0↓
sub 3.0 5.0↓
sum 4.0 2.0↓
sub 3.0 12.0↓
 ↓ とか一マス以上あけても同じです、cygwinGCC使ってるんですがそのせいでしょうか。
[EOF]
0782デフォルトの名無しさんNGNG
>>781
780
0783デフォルトの名無しさんNGNG
今C++を勉強しています。
教則本をみながらやっているのですが、ウィンドウを作成するにもHINSTANCEやらよくわからない型がでてきます。
こういう教則本のソースなどは、隅々まで理解する必要がないのでしょうか。

とりあえず、コンパイルして(例えば)CreateWindowはどういう働きをするのかなどが理解できれば先に進んでもいいんですかね?
0784デフォルトの名無しさんNGNG
>>783
あなたが勉強しているのはWindowsAPI。
言語の勉強と環境の勉強をごっちゃにして混乱されぬよう、気をつけられよ。
ちなみにここはC++スレ、質問はWindowsAPIでスレ違いにて、あしからず。

こちらなどを伺われよ。
http://pc5.2ch.net/test/read.cgi/tech/1095534704/
0785デフォルトの名無しさんNGNG
それC++ちゃう。Win32 APIや! だから、スレ違い!

んで、Win32 APIの関数はMSDNで調べるといいよ
0786デフォルトの名無しさんNGNG
ご指摘ありがとうございます。
スレ違いでしたか…すみません。

わからない関数があるときはMSDNで調べればいいわけですね。
>>784さんのスレも一通り読んで見ます。

ありがとうございました。
0787デフォルトの名無しさんNGNG
stricmp("AAA","aaa")
をC++流に書くとどうなるのですか?
0788デフォルトの名無しさんNGNG
>>787
まずはパラメータの個数と型を正しくする。
0789788NGNG
>>787
あーごめん、strncmp()かと思ったよ。stricmp()なんて非標準関数持ち出すとは思わなくてね。
で、その関数の仕様は?
0790デフォルトの名無しさんNGNG
>>788
stricmpのどこが非標準なのかと小一時間・・・
0791デフォルトの名無しさんNGNG
>>790
はぁ?
0792787NGNG
>>789
大文字は小文字としてstrcmpをしてくれます。
stricmp("AHO","aho") == 0 となります
0793デフォルトの名無しさんNGNG
>>783
プログラミングの前に、まずは適切なスレを見分ける能力を養え。
0794デフォルトの名無しさんNGNG
問題の切り分けなんて、本を読んだり実際にプログラムを読み書きしながら学んでいくしかないだろ。
0795デフォルトの名無しさんNGNG
com研究所のURL教えれ
0796デフォルトの名無しさんNGNG
>>790
stricmpは規格にない。それだけで十分だろう。
0797デフォルトの名無しさんNGNG
>>796
ここはC++のスレだぞ。
stricmpはCにはないがC++にはある。
0798796NGNG
>>797
ISO/IEC 14882:1998にはないが何か?
0799デフォルトの名無しさんNGNG
com研究所のURL教えれ
0800デフォルトの名無しさんNGNG
800ゲットですが何か?
0801デフォルトの名無しさんNGNG
やおいゲット!!
0802デフォルトの名無しさんNGNG
そうはいっても、gccにはあるみたいだね。
snprintfと似たような状況だね。
snprintfが標準になる日は何時だろう・・・。
つか普通の開発じゃsprintf()禁止令出るもんだし、はやく標準にしてもらいたい。
0803デフォルトの名無しさんNGNG
stricmpか
localまで考え出すとキリが無いわな
0804デフォルトの名無しさんNGNG
>>802
あれだ、stringstreamを頑張って使え
0805デフォルトの名無しさんNGNG
まっ、糞みてーなライブラリだけど、boost::formatでも使っとけ
0806カナガワNGNG
MDIを使ったアプリケーションで、チャイルドフレームをSDIのように扱う方法はありませんか?
0807デフォルトの名無しさんNGNG
>>803
まさか locale と間違えてたりする?
0808カナガワNGNG
MDIを使ったアプリケーションで、チャイルドフレームをSDIのように扱う方法はありませんか?
0809デフォルトの名無しさんNGNG
>>807
てへ
0810デフォルトの名無しさんNGNG
>>802
gccにあるだけで標準扱いかよ。
ウンコ野郎だな
0811796NGNG
>>802
ま、C99には入っているし、C++の改定で入る予定では
あるみたいだけれども。
"will likely be in C++0x"
ttp://gotw.ca/publications/mill19.htm
0812カナガワNGNG
MDIを使ったアプリケーションで、チャイルドフレームをSDIのように扱う方法はありませんか?
0813デフォルトの名無しさんNGNG
ない
MSの伝統
0814デフォルトの名無しさんNGNG
ない
0815デフォルトの名無しさんNGNG
int* p = new int();
std::cout << *p << std::endl;
std::cout << int() << std::endl;

VC6SP6
どちらも0になると思ったのですが、newの方は非0になりました。
(デバッグモード・リリースモードどちらも同じ結果でした)
C++的にこれは正しいのでしょうか?
0816デフォルトの名無しさんNGNG
>>815
正しくないです。
"If the new-initializer is of the form (), default-initialization shall be performed"
(5.3.4 New -15- より)
0817815NGNG
>>816
ありがとうございます。
VC6を窓から投げ捨てようと思います。
0818デフォルトの名無しさんNGNG
C++使いたいならVC6は使うなっていうやりとりをもう何回も見てきたが、
いっそのことテンプレにでもいれたらどうなんだ?
0819デフォルトの名無しさんNGNG
会社の事情でVC6を使わざるを得ない人もいるのよ。
0820デフォルトの名無しさんNGNG
ARM 仕様の処理系を ISO/IEC 14882 で論じるバカどもがまた蛆虫のように涌いて出てるな
0821デフォルトの名無しさんNGNG
1.start_engine
2.StartEngine
3.startEngine

みなさんは 1, 2, 3 のどのスタイル使ってますか?
自分はスタイルがAPIやSTLとかぶらないように
Java風な3を使ってるんですが、正直美しいとは
思えませんです。他に何かいいスタイルありますかね…?
0822デフォルトの名無しさんNGNG
>>819
だから、VC6はC++じゃないからあきらめろ、っつーかこのスレに来るな、ってことでしょ。
VC6が悪いんであって、VC6を使う人は悪くないよ。念のため。
0823デフォルトの名無しさんNGNG
>>821
ここでやる話ではない。むしろ、ここでやってはいけない話かもしれない。
0824デフォルトの名無しさんNGNG
識別名のつけ方は、パラダイムや言語の特徴に依存する面もあるから、いいんじゃないか?
0825デフォルトの名無しさんNGNG
>>821
3でいいと思うよ。2だとクラス名で被るし、1だとタイプ数が増える
0826デフォルトの名無しさんNGNG
>>821
どのスタイルというよりコーディング基準に従うだけだ
はっきり言われてなくても周り乖離しないように気をつけてる
0827デフォルトの名無しさんNGNG
>>821
(メンバ)変数は1
(メンバ)関数は2
3は最近知ったから,特に使ってなかったけどどっかに使おうかなぁと考え中

まだ社会に出てないお子ちゃまなので参考にはならんだろうけど
0828デフォルトの名無しさんNGNG
>>827
社会に出るまでにスタイルを統一しなさい
0829デフォルトの名無しさんNGNG
>>828
社会に出ればスタイルの統一なんて自分の一存ではできないだろ。
「統一しなさい」なんて言ってできるわけない。
0830デフォルトの名無しさんNGNG
なにいってんだ
0831827NGNG
>>828
いや、一応↑で統一してるんだけども…
でも>>825のクラス名と被るの言い分は納得。
もう一度洗いなおしてみるかな。

コーディング規約スレもっと伸びないかな
ああいう情報もっと欲しいYO
0832デフォルトの名無しさんNGNG
くだらねえんだよ
0833デフォルトの名無しさんNGNG
ねぇ、C++を作ったってどういうこと?
一体Bjarne Stroustrup 彼は何を作ったの?
0834デフォルトの名無しさんNGNG
C++の基本的言語仕様を作った。
0835デフォルトの名無しさんNGNG
ちょっと待て。
>>815
そのコードはDebugビルドで実行していないか?
もしそうならReleaseビルドだとどうなる?
0836デフォルトの名無しさんNGNG
>>835 よく見ろ。
0837デフォルトの名無しさんNGNG
がーん
0838デフォルトの名無しさんNGNG
>>837
フフフフフフフフフフフフフフフフフフフフフフ
0839デフォルトの名無しさんNGNG
「フ」が10こ(ぐらい)で豆腐

なーーんちゃって!
0840デフォルトの名無しさんNGNG
全米が泣いた
0841デフォルトの名無しさんNGNG
ふとんがふっとんだーーー!!
0842デフォルトの名無しさんNGNG
ふっとんだのはふとんですか?
0843デフォルトの名無しさんNGNG
ふっとんだのはぬるぽです
0844デフォルトの名無しさんNGNG
グーでガッしていいですか?
0845デフォルトの名無しさんNGNG
ぶどうがぶっとんだ
0846デフォルトの名無しさんNGNG
ぶっとんだのはぶどうですか?
0847デフォルトの名無しさんNGNG
ふっ飛ばしたのは台風ですが。
なんかネタないんかい。
0848デフォルトの名無しさんNGNG
おまいら夜は激しいですね
0849デフォルトの名無しさんNGNG
激しいのは夜だけですか?
0850デフォルトの名無しさんNGNG
(*´ー`)漏れはまだまだ若いさ
0851デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/tech/1097880265/
から誘導されてきました。

#include <memory>
struct A { virtual ~A() {} };
class B : public A {};
class C : public A {};

int main(int argc, char* argv[]) {
int i = 0;
std::auto_ptr<A> p(i == 0 ? new B : new C);
return 0;
}

VC++6SP6 。このコードをコンパイルすると
error C2446: ':' : 'class C *' 型から 'class B *' 型への変換ができません。指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
error C2664: '__thiscall std::auto_ptr<struct A>::std::auto_ptr<struct A>(struct A *)' : 1 番目の引数を '' から 'struct A *' に変換できません。
と出ます。理由がわかりません。何が間違っているのでしょうか?
0852デフォルトの名無しさんNGNG
i == 0 ? new B : new C の結果は何型?
0853851NGNG
>>852
B*ですよね?
でauto_ptr<A>のコンストラクタの引数の型はA*だからそのまま渡せると思うのですが。
std::auto_ptr<A> p2(new B);
が通るので正しいはずですよね?
もしかして私何か勘違いしてますか?
0854デフォルトの名無しさんNGNG
>>853
じゃi = 1なら
i == 0 ? new B : new C の結果はC*かい?
そうすると「?:」は返り値の方がダイナミックに変わる演算子ってことになるけど
0855デフォルトの名無しさんNGNG
>853
コンパイラは x ? y : zという演算の型を,
yとzの型を元にいくつかの複雑なルールに従って決めようとします.
そしてyとzの型が関係の無い型のポインタ型であるときには,
この演算結果の型を決めることが出来ずコンパイルエラーとなります.
ちなみにあなたがやりたいことは以下で出来ます.

i == 0 ? (A*)new B : new C
0856851NGNG
>>854-855
ああなるほどよくわかりました。
今まで何気なく?:を使ってたんですが、今回のようなことは気付きませんでした。
ありがとうございました。
0857デフォルトの名無しさんNGNG
C++って言語じゃないのか
0858デフォルトの名無しさんNGNG
>>857
C++はプログラミング言語だが何か。
0859デフォルトの名無しさんNGNG
すいません、質問です。下のプログラムを g++ -Wall でコンパイルすると
T.cc:9: warning: `struct NonVirtualClass' has virtual functions but non-virtual destructor
って怒られるんですが、原因が理解できません。
~X(){} がなければ怒られないのですが・・・
ちなみに g++ のバージョンは 3.3 です。

struct X {
~X() {}
};

struct VirtualClass {
virtual void Method() = 0;
};

struct NonVirtualClass : VirtualClass {
X m;
void Method() {}
};

0860デフォルトの名無しさんNGNG
>>859
つEffective C++
0861デフォルトの名無しさんNGNG
>>859
g++は警告出してくれるんだ・・・やさしいなぁ・・・。
0862デフォルトの名無しさんNGNG
>>859
つ[英和辞典]
0863デフォルトの名無しさんNGNG
>>859
つ�I
0864デフォルトの名無しさんNGNG
struct X {
virtual ~X() {}
};
0865デフォルトの名無しさんNGNG
>>864
struct VirtualClass {
virtual ~VirtualClass() {}
virtual void Method() = 0;
};
仮想デストラクタが必要なのはこっちだろ。
0866859NGNG
>>865
ありがとうございました!
0867デフォルトの名無しさんNGNG
>>864
アホだ
0868デフォルトの名無しさんNGNG
おい、ちょっとまて。
>~X(){} がなければ怒られないのですが・・・
これどーゆーいみよ。
0869デフォルトの名無しさんNGNG
>>868
 クラスじゃないからだろ。
0870デフォルトの名無しさんNGNG
>>869
~X() があればクラスだっていうのか?
0871デフォルトの名無しさんNGNG
うまくつながってないんじゃ?
0872デフォルトの名無しさんNGNG
>>868
~X() があると NonVirtualClass にもコンパイラによって自動的にデストラクタが作成される。
おそらくg++はこの暗黙のデストラクタをvirtual指定無しとして扱って件の警告が出るのではないかと。
0873デフォルトの名無しさんNGNG
>>872
デストラクタのあるメンバを置いただけでも警告が出るようになるな。

12.4 Destructors の -3- -4- に従って
non-trivial なデストラクタを持つかどうかが警告の出る条件になるんだろう。
0874デフォルトの名無しさんNGNG
これってどうよ?

#include <iostream>
using namespace std;
class CBase
{
int m_id1;
public:
CBase(int id1 = 1):m_id1(id1){}
int GetID1() const { return m_id1; }
};
class CDerived : public CBase
{
int m_id2;
public:
CDerived(int id2 = 1):m_id2(id2),CBase(id2*10){}
int GetID2() const { return m_id2; }
};
class CFactory
{
protected:
CFactory(){}
public:
static CBase* GetInstance(){ return new CBase(111); }
};
int main()
{
CBase* p = CFactory::GetInstance();
cout << ((CDerived*)p)->GetID2() << endl;
}
0875デフォルトの名無しさんNGNG
>>874 意味不明
0876デフォルトの名無しさんNGNG
>>875
初心者は口出すなよ
0877デフォルトの名無しさんNGNG
>>876
エスパー以外は初心者か。おめでてーな。
0878デフォルトの名無しさんNGNG
「どうよ」っていう言葉ってどうよ?
0879デフォルトの名無しさんNGNG
>>874
「結果は未定義」が正解。
0880デフォルトの名無しさんNGNG
ただのダウンキャストがどうかしたのか
0881デフォルトの名無しさんNGNG
どうよもくそもねぇじゃん。
まじめに読んで損した。
0882デフォルトの名無しさんNGNG
QueryInterface がどうだかって言いたいのか?
0883デフォルトの名無しさんNGNG
>>874
 SEGV
0884デフォルトの名無しさんNGNG
ファクトリを持ち出したところに何か隠された意味があるのではなかろうか
0885デフォルトの名無しさんNGNG
だめ!!もう限界。
>>874、答えを教えてください。
0886デフォルトの名無しさんNGNG
template<class T> T* Allocate( ptrdiff_t n, T* ) {
  return (T*)operator new((size_t)n * sizeof (T));
}
こんなnewの使われ方をはじめて見たのですが、なにを表しているのですか?
動作させてみたところ、指定したサイズを確保し、コンストラクタは呼ばれないようですが。
「プログラミング言語C++第3版 」を買えばこういったことがすべて書いてありますでしょうか?
0887デフォルトの名無しさんNGNG
>>886
通常のnew演算子で呼び出されるメモリ確保の直接呼出しです。
その本には確かに書いてあります。
0888デフォルトの名無しさんNGNG
通常の方法ですか。どうもです
STLの中身を見ていたら上記のような疑問が山ほど出てきて一人で1000レス行きそうな勢いなので
素直に「プログラミング言語C++第3版 」で勉強してきます
0889デフォルトの名無しさんNGNG
class Widget{ ... };
bool f( const Widget& w ){ ... }

int main(){
    std::vector<Widget> v;
    std::find_if( v1.begin(), v1.end(), std::not1( std::ptr_fun( &f ) ) ); //1
    return 0;
}

1で、
error C2529: '_Left' : 参照への参照は無効です。
warning C4181: 参照型に適用された修飾子は無視されました。

とエラーが出てしまいます。どうすればうまくいきますでしょうか…?
コンテナを vector<Widget*> にして bool f( const Widget* w ) にすれば
ちゃんと動いたのですが、こうするしか解決方法はありませんでしょうか?
0890デフォルトの名無しさんNGNG
そこでboostですよ
0891デフォルトの名無しさんNGNG
そこでるbyですよ。
0892デフォルトの名無しさんNGNG
>>889
fを関数オブジェクトに変えてmem_fun_refでいいんじゃいないの?
0893デフォルトの名無しさんNGNG
>889
> std::find_if( v1.begin(), v1.end(), std::not1( std::ptr_fun( &f ) ) ); //1

std::find_if( v1.begin(), v1.end(), std::not1( std::ptr_fun<Widget>( &f ) ) );

これで通りませんか?試してないのでもし通らなかったらごめんなさい.
#reference to reference問題は良いい加減修正して( ゚д゚)ホスィ…
0894893NGNG
std::find_if( v1.begin(), v1.end(), std::not1( std::ptr_fun<const Widget>( &f ) ) );

の方が適切です.すいません.
0895デフォルトの名無しさんNGNG
>>894
レスありがとうございます
しかし
error C2784: 'std::pointer_to_binary_function<_Arg1,_Arg2,_Result> std::ptr_fun(_Result (__cdecl *)(_Arg1,_Arg2))' : 'T3 (__cdecl *)(const Widget,T2) 用のテンプレート引数を 'bool (__cdecl *)(Widget &)' から減少できませんでした。
error C2784: 'std::pointer_to_unary_function<_Arg,_Result> std::ptr_fun(_Result (__cdecl *)(_Arg))' : 'T2 (__cdecl *)(const Widget) 用のテンプレート引数を 'bool (__cdecl *)(Widget &)' から減少できませんでした。
となってしまいます…
0896デフォルトの名無しさんNGNG
すいません.893, 894は誤りです.無視してください.
892さんが書いているようにfをファンクタにするのが良いと思います.
(mem_fun_refはいらないような?)
0897デフォルトの名無しさんNGNG
つまり
struct Hoge : std::unary_function<Widget, bool>
{ bool operator ()( const Widget& w ) const{ return false; } };
std::find_if( v1.begin(), v1.end(), Hoge() );
ということでしょうか…?

関数ではダメですか…
0898デフォルトの名無しさんNGNG
>>897
もし失望されているようならboostというライブラリを一度見てみることをお勧めします.
functionalというライブラリに改善されたファンクタアダプタがあります.
http://boost.cppll.jp/HEAD/libs/functional/negators.html
0899デフォルトの名無しさんNGNG
>>874 実行したら3行目エラーでたよ
0900デフォルトの名無しさんNGNG
boostってソースしか参考にしていない…
実際に使うには標準じゃないし。。。
0901デフォルトの名無しさんNGNG
>>900
ばっかでーーー。
自分で使う範囲では標準など気にする必要などない。
第一、会社によってSTLすら使わせてくれない
ところがあるそうじゃないですか?俺はプログラマーじゃないから詳しくはないけど。
0902デフォルトの名無しさんNGNG
try〜catchの形式で一般的なものは、次のうちどちらですか?
理由も合わせて述べて下さい。

■パターンA
int hoge() {
try {
int a = 0;
a = 1;
return a;
} catch(...) {
throw;
}
}

■パターンB
int hoge() {

int a = 0;

try {
a = 1;
} catch(...) {
throw;
}
return a;
}

0903大学生NGNG
どうしてもエラーがでるので教えてください

class Concept{
public:
vector<int> number;
double* ave_signal;
}

class GSG{
public:
vector<Concept> m_VecConcept;
int m_length;
};

void Concept::Concept(int length){
ave_signal = new double[length * sizeof(double)];
memset(ave_signal, 0x00, length * sizeof(double));
}
0904大学生NGNG
のようにクラスを作っておいて、

void GSG::func(){
if (flag){
Concept *pCon = new Concept(m_length);
m_VecConcept.push_back(*pCon);
delete pCon;
}
}

ってやると、コンパイラは通るのですが実行時に
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
ってエラーが出てプログラムが強制終了してしまいます。
それもm_lengthが3の時は普通に動いて8のときは死にます。
VC6.0のMFC使ってやっているのですがここで詰まってしまいました。
分かる方教えてくださいまし。
0905デフォルトの名無しさんNGNG
>902
例外を投げる場所と、catch節の処理内容によるのでは。
この例ではどちらもないので、AもBも変わらないと思います。
0906デフォルトの名無しさんNGNG
>>904
取り敢えず、Concept::ave_signalのdeleteをしていないことと
要素数がlength * sizeof(double)なのは変だろうってことと
なんでmemset()するんだかってことが気になった。
0907デフォルトの名無しさんNGNG
>>904
Conceptにコピーコンストラクタ書いてないとか?
0908デフォルトの名無しさんNGNG
C++の見積もりって皆さんどうしてますか?

私は、C言語の場合だと、行数1000行ごとに1日コーディングと見積もりしています。

で、C++の場合は、この方法が使えないと、何かの本で読んだもので・・・

0909デフォルトの名無しさんNGNG
つーか、Cでも行数で単価出すなんて阿呆の仕業じゃあるまいし。
0910デフォルトの名無しさんNGNG
>>908
機能やモジュール単位で細かく分けて、
更に、設計、製造、デバッグ、、、とかって工程ごとに
数字を出して計算してるけどなぁ。
特にC++だからって特別なことはしていない。
その時点で行数がわかるって、
見積もった時点で詳細設計終わってるわけではないでしょw
実際にはそうきっちりいくわけではないんだけど、
クライアントを納得させるにはそれが一番わかりやすいんで。
これっていまどきでは古い?
0911デフォルトの名無しさんNGNG
>>909みたいな香具師は家でプログラミングしてる変体ヲタだと思う
>>908
うちもおおよそそんな感じですよ
0912デフォルトの名無しさんNGNG
行数が出てる時点で作成はほぼ完了してるように思えるが・・・。
モジュール単位の細分化もそんなことができている時点で作成は終わっていると考えられる。
そのとおりに行うコーディングなんかすぐにでも終わるし、
実際はデバッグとテストというどれだけかかるか計算できない部分だけが残る。
0913デフォルトの名無しさんNGNG
デバッグとテストで全工程の3分の1ぐらいは確保するかな。
そのくらい絶対かかりそうだもの。
0914デフォルトの名無しさんNGNG
皆さんに聞きますが、実は裏工程として、
わがままな客の仕様変更の分も
工数に見えない形で入れちゃったりしてるの?
0915デフォルトの名無しさんNGNG
>>914
ケースバイケース。設計をやり直さなければ対応できないほどひどい仕様変更を
申しつけられた時ははっきり「別料金です」と言っている。
0916アマグラマNGNG
ていうか一日1000行も書くの?サイズは20KBくらいですかね。
すごいですね。絶対俺には無理だ
0917デフォルトの名無しさんNGNG
コピペすれば1000行なんてすぐだよ
0918デフォルトの名無しさんNGNG
行単位で見積もりが常識なの?
その方法以外で見積もりしてる会社とかないのかな

あまりに理不尽だなぁって思ったとある学生より
0919デフォルトの名無しさんNGNG
見積もりなんざしねぇ
0920デフォルトの名無しさんNGNG
>>902
両方とも try ブロックの中で例外が発生する可能性がないので
try~catch を書く必要がありません。
0921デフォルトの名無しさんNGNG
毎日1日1000行書き続けられたらすばらしいが
漏れの場合、2000〜3000行位一気に書いてしまうタイプだ。

でも、前後に頭の中で組み立てたり、書き終わってから見直したり、デバッグしたり、
その間に書き直しのために数100行削除とかあったりするから
平均すると100〜200行/日くらいになるかも、、、
0922デフォルトの名無しさんNGNG
プログラムは1日1行まで
0923デフォルトの名無しさんNGNG
今のプロジェクトで俺が書いたソースファイルが合計2.7MB。
大体36KBあたり1000行のようなので、行数に換算するとおよそ75000行。
工期が約150営業日だったので一日あたり大体500行らすい。
もっとも、俺はコーディングより画面デザインやアイコンの作成にかなり時間割いたので、
コーディングメインのやつならもっと多く書いてるかと。
0924デフォルトの名無しさんNGNG
設計がちゃんとできていたら3000行とか書けるよね。
0925デフォルトの名無しさんNGNG
して、行単位以外で見積もってる会社は…?

やっぱまずありえないのかな
まぁどんなにすばらしいソース書いたところで
技術者同士にしか評価できないから難しいんだろうけど
0926デフォルトの名無しさんNGNG
クソな設計を無理矢理押しつけてくるやつには耐えるしかないのか つД`)・゚・
ていうかだんだん話題がマ板化してるぞ
0927923NGNG
別フォルダに入れてた500Kを計算し忘れた。
一日平均600行くらいに訂正します。
0928デフォルトの名無しさんNGNG
>>926
早く設計するほうの人間になってください
0929デフォルトの名無しさんNGNG
何行ぐらいになるかなんかよく解かるね
0930909NGNG
鼬害になるから詳細は省略するが、提案書(或いは要求仕様書)の段階で
おおよその画面枚数と処理の複雑さや取り扱う入出力の種類、制作の
困難さなどから見積もりを概算している。
相手によって、営業が上乗せすることもあれば勉強することもあるし、
詳細設計に入っていく過程で見積もり直すこともしばしば。
或いは掛かった工数そのまま請求することもないではない。
いずれにしても、コメントで行数ぐような無様な真似はしない。
0931大学生NGNG
いろいろdeleteしたら動きました。
回答してくれたみなさんありがとうございました。
0932デフォルトの名無しさんNGNG
>>918
> 行単位で見積もりが常識なの?
んなわけない。
0933デフォルトの名無しさんNGNG
すみません。今日は3行しか書きませんでした。
0934デフォルトの名無しさんNGNG
行数による工数判断があるから、
悪徳PGによる安易なコピペ作業がなくならないのかもな。
0935デフォルトの名無しさんNGNG
発注する側に常に(まともな)SEがいればそういう悪徳業者は減る

のかな…?
0936デフォルトの名無しさんNGNG
最初は簡単そうなシステムで見積もらせといて
後からどんどん肥大化してくのは止めてほすぃ・・・
0937デフォルトの名無しさんNGNG
>>935
前提が間違っていればどのような結論であってもその命題は真。
0938デフォルトの名無しさんNGNG
3枚くらいの画面デザイン見せられて、安心して見積もったら
実はその画面がタブページありのポップアップだらけでしかも、
データによってデザインを大きく変えないといけないなんてこともあったなぁ。
0939デフォルトの名無しさんNGNG
クラステンプレートの第一引数をデフォルト引数にするような、
テンプレートクラスはどうやって書けばいいでしょうか?
template<class T = char> class my_string{
...
}
とすると
my_string<char> aaa;は上手く行きますが、
my_string bbb;
ではエラーが出ます。
0940デフォルトの名無しさんNGNG
>>939
my_string<> bbb;
0941デフォルトの名無しさんNGNG
>>940
ありがとうございます。でも
my_string bbb;
で通るような、クラステンプレートの書き方を知りたいのです。
0942デフォルトの名無しさんNGNG
>>941
template<class T = char> class my_stringT{
...
};

typedef my_stringT<> my_string;

my_string bbb;
0943デフォルトの名無しさんNGNG
std::clogのリダイレクト機能を使ってログ取りをしようとしているのですが、main関数内で

 std::ofstream logfile("something.log");
 if(logfile) std::clog.rdbuf( logfile.rdbuf() );

 clog << いろいろ・・・

とすると一通り正常に実行された後なぜかプログラム終了時にクラッシュしてしまいます。
いろいろ調べたところlogfileがグローバル変数の時はクラッシュしないと分かりました。
logfileの生存期間ってもしかしてプログラム終了までないとダメなんですか・・・?
ちなみに環境はWindows上でminGW+STLportです。
0944デフォルトの名無しさんNGNG
STLportの使用を止める
0945デフォルトの名無しさんNGNG
>>943
logfileのデストラクトでそのstreambufを破棄。
std::clogのデストラクトで↑と同じstreambufを破棄しようとしてクラッシュ。
ってことかな?
0946デフォルトの名無しさんNGNG
Modern C++ Design であった、
template <bool> struct CompileTimeChecker{ CompileTimeChecker( ... ); };
template <> struct CompileTimeChecker<false>{};
#define STATIC_CHECK( expr, msg ) { class ERROR_##msg{}; (void)sizeof( CompileTimeChecker<(expr)!=0>( ( ERROR_##msg() ) ) ); }
の STATIC_CHECK マクロを VC7.1 で使ってみたところ、

error C2066: 関数型へのキャストが正しくありません。
error C2070: 'CompileTimeChecker<false> (main::ERROR_TEST (__cdecl *)(void))': sizeof オペランドが正しくありません。

とエラーが出てしまいました。これは VC の方が間違いなのでしょうか?
0947デフォルトの名無しさんNGNG
テキストで書いた数値ファイル

10
20
30

を読み込むにはどのようにしたらよいでしょうか?
0948デフォルトの名無しさんNGNG
std::ifstream hoge("hoge.txt");
int temp;
while(hoge >> temp)
{
    // なんちゃらかんちゃら
}
0949デフォルトの名無しさんNGNG
>>946
ERROR_##msg() のところがコンストラクタ呼び出しとみなされない
みたいだねえ。
とりあえず
ERROR_##msg() → new ERROR_##msg
にしとけばいい
0950デフォルトの名無しさんNGNG
>>946
だってfalse指定してるじゃん。
0951949NGNG
>>950
VCだとtrue時も掲示エラー出る
false時に本来出て欲しいエラーメセージは
ERROR_TEST' から 'CompileTimeChecker<false>' に変換できません
てなやつ
0952デフォルトの名無しさんNGNG
sizeof に () がついているのでVC++は()内を優先的に型として判断しようとする。
CompileTimeChecker<(expr)!=0>( ( ERROR_##msg() ) )
は、
CompileTimeChecker<(expr)!=0> を戻り値とし、
引数を持たない ERROR_##msg という関数のプロトタイプなので、
そのサイズを取得しようとするが、
ERROR#msg はすでに class として定義されているので、エラーになる。

VC++の挙動が正しいかと。
sizeof の () をはずせばエラーは出なくなる。
0953デフォルトの名無しさんNGNG
>>951
あっ。本当だね。
でも、newだとメモリーリークを起こさない?
ようするに原因はERROR_##msg()を関数と認識するみたいだから
#define STATIC_CHECK( expr, msg ) \
{ class ERROR_##msg{}; \
(void)sizeof( CompileTimeChecker<(expr)!=0>(static_cast<ERROR_##msg&>(ERROR_##msg())) ); } /**/
キャストしてやればいいだけみたい。
0954デフォルトの名無しさんNGNG
なんかかぶった。
0955949NGNG
>>952
sizeof の () のあるなしについて勉強になりました!
>>953
話は952で終わってはいるが、sizeof内の式は実行時の評価対象では
ないからメモリアロケート自体実行されず、当然リークも起こさない。
0956かめびとNGNG
STLのmapを使っていて問題が出ました。

map<char*, int> mymap;
mymap["ABC"] = 0;

char* tmp = strdup("ABC");

printf("%d\n", mymap["ABC"]); // --> ok
printf("%d\n", mymap[tmp]); // --> 駄目

char*の先頭アドレスじゃなくて中身で対応させるには
どうしたらいいんでしょうか?
0957デフォルトの名無しさんNGNG
std::stringを持たせる。
0958デフォルトの名無しさんNGNG
あ、そうそう。それからstrdup()は標準関数じゃないから、
あまりお使いなさるな。
0959かめびとNGNG
なるほど。string使えばいいのか。
C++のライブラリあまり使ったことがないので盲点でした。
strdupも控えます。
ありがとうございますm(_ _)m
0960デフォルトの名無しさんNGNG
質問です。
C++の設計について、詳しく説明してるサイトって無いですか?
0961デフォルトの名無しさんNGNG
質問が漠然としすぎ
0962デフォルトの名無しさんNGNG
>>960
こうすればいいっていうような設計法の定石というのは無いのでそういった
ページはまれだと思うけれど、強いていうならデザインパターンかな。
設計のテンプレートのようなもの。
デザインパターンでググってみればいくつかサイトが見付かると思うよ。
0963デフォルトの名無しさんNGNG
>>961
自分の中でも漠然としてるというか・・・
設計してコーディングしてると、どこか間違ってたり、もっといい設計が有るように思うんで
設計そのものについて詳しく勉強してみようかなと。

>>962
ありがとう。ググってみます。
0964デフォルトの名無しさんNGNG
unstrdup がないんだよな。
なんで標準から洩れたかよくわかる。
0965デフォルトの名無しさんNGNG
>>963
EffectiveC++位読んでおこう。
0966デフォルトの名無しさんNGNG
>>963
Bjarne の言葉を忘れるな
>言語はそれを使う人が何を考えることができるかを決めてしまう

言語に限ったことじゃない
デザインパターンでも同じこと
とにかく、色々やれ
0967デフォルトの名無しさんNGNG
禿と呼べ
0968デフォルトの名無しさんNGNG
失礼、忘れてた
0969デフォルトの名無しさんNGNG
禿鷹YBBホークスのコーチになってほしい。
0970デフォルトの名無しさんNGNG
BCB の __closure って、
標準 C++ でエミュレートしようとすればどうなるの?
0971デフォルトの名無しさんNGNG
>>970
Rubyを使ってください。
0972デフォルトの名無しさんNGNG
>>971
馬鹿はだまってろ

では分かる人お願いします
0973デフォルトの名無しさんNGNG
馬鹿差別反対
0974デフォルトの名無しさんNGNG
>>972
関数オブジェクトを使ってください。
0975デフォルトの名無しさんNGNG
>>973
禿しく笑わせて頂きました
0976デフォルトの名無しさんNGNG
>>970
staticにして引数にthisポインタ加えればいけるんでない?
0977デフォルトの名無しさんNGNG
>>970
手っ取り早くするならboost::bind使う
0978デフォルトの名無しさんNGNG
次スレは?
ないなら>>979が立てるけど。
0979デフォルトの名無しさんNGNG
すみません、教えてください。

int を char にキャストするオペレータを
オーバーロードすることってできますか?

operator char( int p ) {...}

とか書くと
error: `operator char(int)' must be a nonstatic member function
って怒られちゃいます。
環境は g++ 3.3 です。よろしく!

あ、すみませんが、うちからスレ建てられないんで、
978 さん、よろしくおねがいします。
0980デフォルトの名無しさんNGNG
>>979
int を char にキャストするオペレータなど存在しない。
0981デフォルトの名無しさんNGNG
っつか組込型の振る舞いを変えたいってことか?
逝って良し
0982デフォルトの名無しさんNGNG
>>979
エラーメッセージに答え書いてあるだろ
0983デフォルトの名無しさんNGNG
オペレータのことは忘れて、独自のキャストを作ってみるとか。
template <typename T1, typename T2> T2 my_cast(T1 t) {
return static_cast<T2>(t);
}
template <typename T1> T1 my_cast(int i)
{
return 何か変わったこと(i);
}
int i = 0;
char ch = my_cast<char>(i);
0984デフォルトの名無しさんNGNG
おまえもなー
0985デフォルトの名無しさんNGNG
>>981,983
既存のソースでこの型変換が行われてるところを検出したいんです。
舌足らずですみません。
>>982
int 型のメンバー関数を定義する方法をご存知だったら教えてくれませんか?
>>980
やっぱりそうなんですか。
0986デフォルトの名無しさんNGNG
疑問に思ったので、質問をば

関数Aを可変変数で
void A(LPCSTR fmt, ... );
という風に書いた時
void B(LPCSTR fmt, ... );
という関数内で、A(fmt);みたいな感じで渡せないでしょうか?
試したら無理だったのだが、どうにかして渡せないでしょうか?
どうにかして、proxyパターンで可変変数の関数を委譲させたいのですが………
0987デフォルトの名無しさんNGNG
>>986
むりぽ
0988デフォルトの名無しさんNGNG
>>986
可変引数の関数を用意するときはちゃんと va_list 版も作る癖をつけれ。
↓こんなヤツ。
void A(LPCSTR fmt, va_list arg_list);
void B(LPCSTR fmt, va_list arg_list);
0989デフォルトの名無しさんNGNG
無知な漏れに>>988を詳しく教えて下さい
0990デフォルトの名無しさんNGNG
10 レス以内に va_list を説明するスレになりました。
0991デフォルトの名無しさんNGNG
va_list 版って何?
0992デフォルトの名無しさんNGNG
>>985
人に聞く前にすることがあるだろ
メンバ関数を追加するにあたって必要となるものを列挙してみろ

class a
{
private:
operator char () const;
};

#define int a
0993デフォルトの名無しさんNGNG
>>989
こんな感じのサンプルコードでわかる?

ore_printf(const char *format) {
static int count = 0;
print("[%08.8d]", count++);
va_list arg_list;
va_start(arg_list, format);
vprint(format, arg_list);
va_end(arg_list);
print("\n");
}
0994デフォルトの名無しさんNGNG
>>985
コンパイラの警告オプションをチェックしてみたら?
0995デフォルトの名無しさんNGNG
やばいやばい、次スレ次スレ…
0996デフォルトの名無しさんNGNG
>987
ありがとうございます、委譲は楽に書けませんかorz

>988
作ると作らないでは、どのように違うのでしょうか?
コンパイラのチェックとか………?
0997v(^・^)vNGNG
まだなら漏れが次スレ建てるから、落ち着いて待ってろ。
0998デフォルトの名無しさんNGNG
>>993
わかんねぇ…
vprintf でググってみる
0999デフォルトの名無しさんNGNG
999キター
1000デフォルトの名無しさんNGNG
1000!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。