スレを勃てるまでもないC/C++の質問はここで 22
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2014/05/13(火) 01:12:47.46ID:BZ1B9xOm過去ログ
01 http://pc11.2ch.net/test/read.cgi/tech/1167476845/
02 http://pc11.2ch.net/test/read.cgi/tech/1178503366/
03 http://pc11.2ch.net/test/read.cgi/tech/1187521676/
04 http://pc11.2ch.net/test/read.cgi/tech/1221633708/
05 http://pc11.2ch.net/test/read.cgi/tech/1230516307/
06 http://pc11.2ch.net/test/read.cgi/tech/1231564903/
07 http://pc11.2ch.net/test/read.cgi/tech/1232983248/
08 http://pc12.2ch.net/test/read.cgi/tech/1235921779/
09 http://pc12.2ch.net/test/read.cgi/tech/1240022781/
10 http://pc12.2ch.net/test/read.cgi/tech/1242300936/
11 http://pc12.2ch.net/test/read.cgi/tech/1245059383/
12 http://pc12.2ch.net/test/read.cgi/tech/1248010352/
13 http://pc12.2ch.net/test/read.cgi/tech/1260842197/
14 http://pc12.2ch.net/test/read.cgi/tech/1269273471/
15 http://pc12.2ch.net/test/read.cgi/tech/1273368706/
16 http://hibari.2ch.net/test/read.cgi/tech/1279285647/
17 http://hibari.2ch.net/test/read.cgi/tech/1285115590/
18 http://hibari.2ch.net/test/read.cgi/tech/1291571263/
19 http://hibari.2ch.net/test/read.cgi/tech/1308106024/
20 http://toro.2ch.net/test/read.cgi/tech/1316013463/
21 http://toro.2ch.net/test/read.cgi/tech/1342285511/
0002デフォルトの名無しさん
2014/05/13(火) 01:21:53.71ID:BK7bod/g0003デフォルトの名無しさん
2014/05/13(火) 18:18:10.74ID:A9K77IIM0004デフォルトの名無しさん
2014/05/14(水) 05:50:20.23ID:Xzsp2rfd何か良い解説が載ってある本かサイトはないでしょうか?
0005デフォルトの名無しさん
2014/05/14(水) 08:15:17.76ID:+P9aBJqUCで書かれてるの多いし。
0006デフォルトの名無しさん
2014/05/14(水) 11:48:07.31ID:mJzoB0fa0007デフォルトの名無しさん
2014/05/14(水) 18:42:46.24ID:Nzt71bWanull_ptrではないのには何か理由があるのですか?
どうでもよいことですが気になってしまいます
0008デフォルトの名無しさん
2014/05/14(水) 20:16:13.60ID:2QlwcCvG0009デフォルトの名無しさん
2014/05/15(木) 18:22:05.94ID:5sMFAW9N0010デフォルトの名無しさん
2014/05/16(金) 15:43:55.66ID:vCeiEc1O最終的に解放が必ず必要って解釈して良い?
動的じゃないポインタってある?
0011デフォルトの名無しさん
2014/05/16(金) 16:14:28.33ID:wig+3ePFint a;
int *p = &a;
0012デフォルトの名無しさん
2014/05/16(金) 16:16:44.29ID:WW/l1jAv00137
2014/05/16(金) 19:44:41.34ID:ZlViVWqR文化の違いなんでしょうか?
ありがとうございました!
0014デフォルトの名無しさん
2014/05/16(金) 19:53:39.11ID:iSjldn++/*
整数15と37の和を表示する
*/
#include<stdio.h>
int main(void)
{
printf("%d",15+17); /*整数15と37の和を10進数で表示*/
return(0);
}
とhspスクリプトエディタにうちこんだのですが
#HSP script preprocessor ver3.32 / onion software 1997-2013(c)
#Use file [hspdef.as]
#Error:invalid include suffix in line 4 [???]
#Fatal error reported.
となってしまいます よかったらだれかおしえてください
return(0);
0015デフォルトの名無しさん
2014/05/16(金) 20:16:19.66ID:WW/l1jAvhttp://toro.2ch.net/test/read.cgi/tech/1393282298/l50
0016デフォルトの名無しさん
2014/05/16(金) 20:43:46.63ID:wig+3ePFC言語とHSPを混同するな
0017デフォルトの名無しさん
2014/05/16(金) 22:48:00.00ID:TJX0UH9b==0でtrueでにならない限り計算ではエラーにならないと思うので
問題ないですよね?
0018デフォルトの名無しさん
2014/05/16(金) 23:01:56.31ID:ZLut8i0j型が double で、非常に小さな値のときに、
==0 は false だけど、演算結果が無限大になることはあるけど大丈夫?
0019デフォルトの名無しさん
2014/05/17(土) 00:16:34.85ID:V4dexxPJシミュレーションプログラムでの命名について
アイデアください
時間を無次元化したら
stepって単位にするのが一般的だと思うけど
長さを無次元化したら
なんて名前にしたらいいと思う?
0020デフォルトの名無しさん
2014/05/17(土) 00:21:01.02ID:R4olBPWVそれぞれtとlでええんとちゃう?
lが嫌ならmとかで
0021デフォルトの名無しさん
2014/05/17(土) 00:21:24.12ID:YyEzaSn40022デフォルトの名無しさん
2014/05/17(土) 22:48:54.63ID:Twx7r9t20023デフォルトの名無しさん
2014/05/17(土) 23:35:50.73ID:jvmVGTrfvectorに配列型を指定した場合の挙動が分からなくて困っています。
正確には
std::vector< double[2] > vec1;
みたいなコードを書いたんですが、これはやってはいけないコードなのでしょうか?
push_backやresizeを呼ぼうとするとどうやってもエラーで進まないです。引数有りコンストラクタも呼べません。
素直に
vector<double> vec1[2];
とやるべきなのでしょうか?
また、テンプレートに配列型を指定できないのはvector特有の性質なのでしょうか?
0024デフォルトの名無しさん
2014/05/17(土) 23:50:44.42ID:R4olBPWV<>を使うってことはtemplateを使ってるんだから、型名以外はダメだったような……
vector<double> vec1[2];
とやると、vectorな変数が2個できるから、使える添字の範囲は
vec1[0〜1][0〜?]となる(?はvectorなので不定数)。一方、
vector< vector<double> > vec1; //コンパイラの解釈的に空白は必須だったはず
と二段重ねにすると、resize()でサイズを弄れるから、例えば
vec1.resize(3);
for(int i = 0; i < 3; ++i){
vec1[i].resize(2);
}
とすると、使える添字の範囲はvec1[0〜2][0〜1]となる
0025デフォルトの名無しさん
2014/05/18(日) 02:00:23.39ID:3fQTMrTlありがとうございます
template自体が配列使っちゃいけないんですか
現在newを使ってるんですが、ソースの書き換えができない段階に来ており
添え字の問題を解決するために結局operator[]を定義したクラスを作ることにしました
0026デフォルトの名無しさん
2014/05/18(日) 03:51:33.54ID:nSMECTwp普段はJavaを使用しており、開発環境もEclipseを使っているのですが
どうにもVisualStudioの使い方が判らず困っています。
VisualStudioの設定や便利な使い方を学ぶのにお勧めのWebサイトや書籍などありませんか?
0027デフォルトの名無しさん
2014/05/18(日) 04:28:14.54ID:+bye9+6cなぜここで訊く
0028デフォルトの名無しさん
2014/05/18(日) 08:22:30.19ID:Uw9b9LOtできなかった時点で確定している事実)のだから、机を並べて事細かにアドバイスして
くれるような人間がいない状況で新しいものに手を出すのは無謀なレベルの人間>>26
0029デフォルトの名無しさん
2014/05/18(日) 10:17:46.15ID:cA8A9s6T良く分からんけどstd::arrayがあるからこんな風に書いたらどうかな?
わざわざoperator[]があるクラスを作るのは面倒だし、vectorを入れ子にするとコード膨らむし
typedef std::array<double, 2> Ad2;
int main()
{
std::vector<Ad2> vad;
Ad2 ad;
ad[0] = 0.0; ad[1] = 1.0;
vad.emplace_back(ad);
ad[0] = 2.0; ad[1] = 3.0;
vad.emplace_back(ad);
for (auto a : vad)
std::cout << a[0] << ' ' << a[1] << std::endl;
}
0030デフォルトの名無しさん
2014/05/18(日) 14:27:07.69ID:geSLm+s7constを付けても付けなくても違反でないのですが、どちらがよいのでしょうか?
0031デフォルトの名無しさん
2014/05/18(日) 15:18:49.21ID:MO8Dtd0gx11ウィンドウ内に表示したいです
0032デフォルトの名無しさん
2014/05/18(日) 16:00:30.80ID:P2EXL/Geなぜconstを付けるのかということを考えると
プロトタイプ宣言に付けないと価値が半減する
0033デフォルトの名無しさん
2014/05/18(日) 16:16:35.52ID:oqaXJcpoarrayのことは知りませんでした。その方がずっと簡単にできますね。
こちらの状況は、これまでnewで
int n = XXX;
double (*vecters)[2] = new double[n][2]
のようにしていたのですが、当初想定してなかったメモリ解放のケースが大量に出てきてしまいました
そこでvectorで解決しようと思ったのですが、vectorにvector入れ子だと添え字の順番が逆で
しかしもう書き換えができないほど利用数が多かったので、vectorに自分で定義したクラスを入れようとしてました
ですがarray使えば済む話でしたね。今までSTLにあまり触れてこなかったのですが、これを機に勉強しようと思います
ありがとうございました
0034デフォルトの名無しさん
2014/05/18(日) 16:27:08.12ID:gVgdo/dnsystem("vlc moviefile.mp4");
0035デフォルトの名無しさん
2014/05/18(日) 17:10:22.13ID:DIHfwpMSそれだったらスマポに入れればいいぞ
もっと簡単になる
int main()
{
int n = 10;
std::unique_ptr<double [][2]> ud(new double[n][2]);
int i = 0;
std::for_each(ud.get(), ud.get() + n, [&i](double* p){ p[0] = i + 1.0; p[1] = i + 2.0; i++; });
for (int i = 0; i < n; i++)
std::cout << ud[i][0] << ' ' << ud[i][1] << std::endl;
}
0036デフォルトの名無しさん
2014/05/18(日) 17:14:24.57ID:DIHfwpMS×>>3
○>>33
0037デフォルトの名無しさん
2014/05/19(月) 20:38:58.41ID:u0kYoYP8委譲をした元クラスを解放すれば
委譲されたクラスは自動で解放される?
委譲されたクラスのデストラクタはちゃんと呼ばれる?
0038デフォルトの名無しさん
2014/05/19(月) 21:02:29.78ID:FaLSmftQ0039デフォルトの名無しさん
2014/05/19(月) 22:38:02.91ID:mLyDgbnZこのスマポという奴を使う場合
ud[n][2]の2のほうも変数にする方法は有りますか?
0040デフォルトの名無しさん
2014/05/19(月) 23:04:05.15ID:Yfo7RAeEconstexpr int を使えば行ける
但し行毎に列の長さを変えるような使い方は出来ない
そういう時はvectorを使う
0041デフォルトの名無しさん
2014/05/19(月) 23:45:45.38ID:Bw7LBrUSパソコンに入っている microsoft visual studio professonal 2013
でc言語を入力したいと思っているのですがなかなかうまくいきません
どうすればいいですか?
あとおすすめのc言語開発環境などがあったらおしえてほしいです
0042デフォルトの名無しさん
2014/05/20(火) 00:02:52.05ID:mxK7K6eG>microsoft visual studio professonal 2013
初心者なのにExpressじゃなくていきなりProfessional版かよ……
まあそれはともかく、とりあえずC言語のプログラムを動かしたかったら、
・ソースコードをメモ帳等のエディタで書いて保存。拡張子は「.c」を推奨
(Visual Studio内にもエディタはあるけど使い方を覚えるのはちょっと手間かも)
http://i.imgur.com/CTRzqgR.png
・スタートメニューから、「Visual Studio 2013」→「Visual Studio ツール」で
出てくる画面から、「VS2013 x64 Cross Tools コマンド プロンプト」か
「VS2013 x86 Native Tools コマンド プロンプト」をクリック
http://i.imgur.com/nwFfURk.png
・するとコマンドプロンプトが出現するので、ごく普通にソースコードが置いてある
フォルダまでCDコマンドで移動
http://i.imgur.com/lvOBxVb.png
・後はclコマンドで、「cl xxxx.c」と入力してエンターするだけ!
(xxxx.cは、自分が保存したソースコードのファイル名を入力)
http://i.imgur.com/3mOXHRP.png
・出来たexeを実行すれば結果が出てくるはず。お疲れ様でした
http://i.imgur.com/U5FNBNp.png
ちなみにC言語開発環境としては素直にVisual Studioを勧めておく
(いまどきBorland C++ Compiler 5.5を使う意味はあまりないので)
0043デフォルトの名無しさん
2014/05/20(火) 00:03:29.79ID:Yfo7RAeEでも64bit環境でそんな大きな配列使わないよね・・・
0044デフォルトの名無しさん
2014/05/20(火) 00:11:29.08ID:KXJMtxo4素のCならTiny C Compilerを--runで動かすのがトライアンドエラーが早くて便利で、
コマンドプロンプトで「tcc.exe --run ソースコード.c」で実行ファイル作らずにコンパイルして動かせる。
Visual Studio使うならVisual Studio コマンドプロンプトってのがメニューに有るだろうからそれ使う。
「CL ソースコード.c」でコンパイルして作られた実行ファイルを実行すればいい。
ソースコードはメモ帳でも何でも適当なテキストエディタで拡張子を.cにしたファイルとして作ればいい。
Visual StudioのIDE使って開発してもいいけど、上手く行かなかったらしいから取り敢えず省略。
でもまずは取り敢えず適当なCの入門手引をWebサイトでも書籍でもいいから手に入れるべき。
あとはその手引に合わせた環境を用意するなり、使い方を読み替えて使う。
そもそも、なんでVSのProが入ってんだそのパソコン…
誰かが入れてくれたなら入れてくれた奴に聞くのが一番手っ取り早い気がする。
0045デフォルトの名無しさん
2014/05/20(火) 00:17:47.05ID:zlaxDiQaそれ同じこと既に言ってるんだけど
……いっそこれ使った方が楽ちんな気がする(中身はTiny C Compiler)
http://9cguide.appspot.com/p_9cide.html
0046デフォルトの名無しさん
2014/05/20(火) 00:21:02.90ID:KXJMtxo4全部が全部同じじゃないし、投稿時間だって10分も違わないし、レスが被るくらいでみみっちいこと言うなよ
0047デフォルトの名無しさん
2014/05/20(火) 01:14:46.12ID:2A54L/7+constexpr std::size_t m = 2;
struct mydeleter1 {
void operator()(double (*p)[m]) {
std::cout << "delete double*[" << m << "]" << std::endl;
delete[] p;
}
};
int main()
{
int n = 10;
{
std::unique_ptr<double [][m], mydeleter1> ud(new double[n][m]);
int i = 0;
std::for_each(ud.get(), ud.get() + n, [&i](double* p){ p[0] = i + 1.0; p[1] = i + 2.0; i++; });
for (int i = 0; i < n; i++)
std::cout << ud[i][0] << ' ' << ud[i][1] << std::endl;
}
std::cout << "unique_ptr was deleted." << std::endl;
}
カスタムデリータで確実に解放されている事を確認した
本当はconstexprはmain()の中に書くとすっきりするんだけど、classの前方宣言を
行ってしまうとmの値が不明になってコンパイル出来なくなるので外に出した
0048デフォルトの名無しさん
2014/05/20(火) 02:32:30.63ID:OAGGaPxS0049デフォルトの名無しさん
2014/05/20(火) 06:55:45.27ID:HULE9c200050デフォルトの名無しさん
2014/05/20(火) 10:31:47.12ID:jnRMRVPU無理じゃ
http://d.hatena.ne.jp/nagoya313/20100305/1267758837
std::shared_ptrならカスタムデリータにラムダ式を使えるが、std::unique_ptrはダメ
0051デフォルトの名無しさん
2014/05/20(火) 12:34:49.57ID:UR0HXhEBautoに代入してからなら入るはずだけど
0052デフォルトの名無しさん
2014/05/20(火) 14:37:47.10ID:U8Xj8N/Dstd::unique_ptr<double [][m], decltype(mydeleter2)> ud(new double[n][m], mydeleter2);
こんなのか
変態過ぎるwww
0053デフォルトの名無しさん
2014/05/20(火) 15:32:16.32ID:PibgqYJGa = new A;
b=a;
delete a;
a=new A;
b!=a
という保証なんてどこにもないですよね?
0054デフォルトの名無しさん
2014/05/20(火) 17:05:17.57ID:mSiEAm6Z0055デフォルトの名無しさん
2014/05/20(火) 17:06:36.99ID:y0AQP6Vn0056デフォルトの名無しさん
2014/05/20(火) 18:38:43.12ID:KXJMtxo40057デフォルトの名無しさん
2014/05/20(火) 20:58:24.17ID:eMXV5lE3とりあえず virtual つけとけば問題ない?
0058デフォルトの名無しさん
2014/05/20(火) 21:10:48.34ID:fbMM1sIr0059デフォルトの名無しさん
2014/05/20(火) 21:17:17.03ID:XZ8PbsoH基底クラスの方じゃないかい?
006057
2014/05/21(水) 21:12:40.05ID:Rtlj0b94基底クラスのデストラクタには
とりあえず virtual つけとけば問題ない?
あと、派生クラスのデストラクタに
virtual つけとくとなにか問題ある?
0061デフォルトの名無しさん
2014/05/21(水) 23:10:48.52ID:QpxSOORZ派生クラスのデストラクタは基底クラスのデストラクタにvirtualが付いている場合デフォルトでvirtualと
みなされる
http://www32.ocn.ne.jp/~ons/text/CPP0xFAQ.html.ja
ここら辺読んでよ
finalつけるとどうなるんだっけ?コンパイルエラー?警告だけ?やってみればいい話だけど
0062デフォルトの名無しさん
2014/05/22(木) 00:58:34.82ID:ZWGxuBLk×基底クラスのデストラクタが呼ばれず
○派生クラスのデストラクタが呼ばれず
あと、それが起きるのは基底クラスにキャストした状態でdeleteした場合などで、
デストラクタが呼ばれない事が問題だから起きるのはメモリリークだけじゃない。
ハンドルがリークする場合もあれば終了処理が行われない場合もある。
だったはず。
0063デフォルトの名無しさん
2014/05/22(木) 08:14:19.27ID:B1HhBS7N006460
2014/05/22(木) 20:57:36.89ID:m4yPgbOUクラスのデストラクタ全てにvirtualつけとけば
問題なくない?
0065デフォルトの名無しさん
2014/05/22(木) 21:14:59.60ID:2g4glAhM0066デフォルトの名無しさん
2014/05/22(木) 22:10:33.87ID:5c02VcX7まず最初に二人の情報(5桁の数字ID、生年月日)入力をして、
そこから演算を行い、占い結果を表示するプログラムのソースを書いていただけないでしょうか
演算方法は何でもいいですし、結果は何通りでもいいです
簡単なものでも全然構いませんので、お願いしますm(_ _)m
0067デフォルトの名無しさん
2014/05/22(木) 22:18:23.05ID:33euSJkO占い結果で分岐するのをswitch使ってって事でいいのか
0068デフォルトの名無しさん
2014/05/22(木) 22:21:18.26ID:2g4glAhM何もかも丸投げしてんじゃねーよw
せめてIDと生年月日から占う部分だけでも作れ
(もちろんコード化できるぐらいキッチリ仕様をまとめること)
0069デフォルトの名無しさん
2014/05/22(木) 22:22:03.03ID:5c02VcX7そうです><
0070デフォルトの名無しさん
2014/05/22(木) 22:37:32.88ID:33euSJkOswitch(占い結果){
結果1:
printf("結果1です");
break;
結果2:
printf("結果2です");
break;
}
0071デフォルトの名無しさん
2014/05/22(木) 22:59:28.62ID:2g4glAhM流石に入力部分ぐらいstd::cin使えば楽勝だろうから、
サンプルデータとしては適当な人物のものを使っている。
http://codepad.org/Fx7dtDlo
0072デフォルトの名無しさん
2014/05/22(木) 23:11:03.08ID:5c02VcX7まさか答えてくださるとは……涙が出てきました、本当にありがとうございます!!!TT
まだ何もかも初心者で分からないですがあなたのような人を目指して勉強がんばっていきたいですっ!
0073デフォルトの名無しさん
2014/05/22(木) 23:16:16.25ID:2g4glAhM入門書片手にゆっくり学んでいけばいいんじゃないかな
「C++で」と書いてあったからワザとclassとかfriend関数とか使ったけど、
本来なら小細工無しでmain関数だけでも書ける内容だしね……
流石にやりすぎた感が否めない(^_^;)
(そもそも剰余取るならswitch使わず最初からstd::stringの配列として
結果を用意した方が良いと思うけど)
0074デフォルトの名無しさん
2014/05/24(土) 05:35:02.60ID:LVEVeP19つかってhttp get をしてみたら
デバックプリントで
OK
と表示されるのですが、このデバック表示を消すにはどうすればいいのでしょうか
http://curl.haxx.se/libcurl/c/simple.html
0075デフォルトの名無しさん
2014/05/24(土) 10:58:45.01ID:NSCx1NVk0076デフォルトの名無しさん
2014/05/24(土) 20:55:01.22ID:jba60f72にいろんな文字列を代入したとして、その中から、
string keyWord ="ABC";
で始まっている要素だけを取り出して、新たなvector<string>を
作りたいのですが、どう書けばよいでしょうか?
0077デフォルトの名無しさん
2014/05/24(土) 21:02:24.98ID:BoH7rvjbやっつけだけどこんなのでいいのか?
vector<string> myVect;
(中略)
vector<string> myVect2;
string keyWord ="ABC";
for(size_t i = 0; i < myVect.size(); ++i){
if(myVect[i].substr(0, keyWord.length()) == keyWord){
myVect2.push_back(myVect[i]);
}
}
0078片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0
2014/05/24(土) 21:05:14.48ID:cV3HOdorfor (auto& str : myVect) {
if (str.find(keyWord)==0) words.push_back(str);
}
0079デフォルトの名無しさん
2014/05/24(土) 21:46:37.05ID:jba60f72ありがとうございます!!
無事動きました。C++勉強中なので大変勉強になりました。
関連してもう一つ教えてください。
教えていただいた方法を、vectorに対して、
vector<string> result = myVect.startWith("ABC");
みたいに自分でstartWith()というメソッドを作りたいのですがC++では
そういうことが出来るのではないかと思っているのですが、
どういうキーワードでググればよいでしょうか?
0080片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0
2014/05/24(土) 22:16:43.35ID:cV3HOdorclass MyVector : public vector<string>
{
MyVector(){}
MyVector(const MyVector& v):vector<string>(v){}
MyVector& operator=(const MyVector& v){
this->assign(v);
return *this;
}
~MyVector(){}
vector<string> startWith(const string& str){
...
}
};
0081デフォルトの名無しさん
2014/05/25(日) 04:47:21.43ID:Nr3u6HQ6サンプルありがとうございます。
これを参考に作ってみます。
>それは簡単にはできない。
簡単には出来ないということですが、何か難しい手法を使うと実現できるのでしょうか?
C#だと既存のクラスに拡張メソッドを追加できたので、C++でも出来るのではと思ったのですが。
0082デフォルトの名無しさん
2014/05/25(日) 11:24:05.95ID:CXANs0iQC#でできることがC++でできるわけでなはい、逆も然り
簡単には追加できないので、ある種のライブラリセットでは、
myVect|startWith("ABC"); みたいな書式で関数を追加する方法を採用している。
なお >>80 で作ったクラスは、vector として使うとスライシングやリークを起こすので、
MyVector というクラスそのものとして使うこと。
0083デフォルトの名無しさん
2014/05/25(日) 11:29:56.00ID:J7hNFDCP特にC/C++システム記述用に設計された経緯があるからC++で簡単に「できない」という
のは、かなり危険な知識レベルの表れだね。
0084デフォルトの名無しさん
2014/05/25(日) 11:35:03.11ID:JrQwFRNGvoid f(char*,int);
int main(void){
char hoge[10];
scanf("%9s",hoge);
f( hoge,strlen(hoge) );//文字列と \0を除く文字数
return 0;
}
void f(char* hoge,int len){
char** pp = (char**)malloc(sizeof(char*) *(len+1) );
int i;
char b='\0';
if( *pp == NULL ){
printf("memoryerror");
}else{
*(pp+len)=&b;
for(i=0;i<len;i++){
*(pp+i)=&hoge[i];
}
printf("%s\n",*pp);
}
free(pp);
}
これ学校のサーバ(詳細不明)上gccで実行するとmemoryerror
VisualC++2010Expressで実行すると入力と出力が一致するのですが
こういうことってよくあることなのでしょうか
またメモリ確保できなかった理由わかりますか?
0085デフォルトの名無しさん
2014/05/25(日) 11:46:43.77ID:gWmYYtrqまともに見れるやつに書きなおしたら動くだろ。
何をやりたいのかよくわからないので形式的な点だけを指摘するのだが
>char** pp = (char**)malloc(sizeof(char*) *(len+1) );
ここでメモリを確保できなかった場合は pp == 0 となるのだから
>if( *pp == NULL ){
ここは pp == NULL となるべき
0087デフォルトの名無しさん
2014/05/25(日) 12:05:13.32ID:JrQwFRNG他のコードをコンパクトにしたら意味のないものになってしまいました
>>86 直してみましたが visualC++で思い通り gcc でmemoryerrorです
ポインタの動的配列を作って要素にアクセスしたいのですがあってますか?
0088デフォルトの名無しさん
2014/05/25(日) 12:10:49.45ID:EMg57a+qじゃないのか
*ppに何入ってるかなんてわからんだろ
0089デフォルトの名無しさん
2014/05/25(日) 12:16:15.52ID:mGonMRxnhttp://codepad.org/0LJCCffh
0090デフォルトの名無しさん
2014/05/25(日) 12:19:00.66ID:JrQwFRNG>>86 >>88 修正でgcc直りました
修正前visualC++ 動いてたのはなぞだが
お騒がせしました
0091デフォルトの名無しさん
2014/05/25(日) 12:21:02.58ID:JrQwFRNGもうお騒がせしたくないのですが
レベル上がってまともな議論できるようになったらまた来ます
0092デフォルトの名無しさん
2014/05/25(日) 12:22:00.93ID:JrQwFRNG0093デフォルトの名無しさん
2014/05/25(日) 12:24:16.59ID:EMg57a+q0094デフォルトの名無しさん
2014/05/25(日) 12:52:26.41ID:2Bb1jnf+regexとか
0095デフォルトの名無しさん
2014/05/25(日) 12:58:54.95ID:2XYWcL+D修正前と修正後レスしたらわかるんじゃないかな
0096デフォルトの名無しさん
2014/05/25(日) 13:14:26.31ID:vrjD7GQR0097デフォルトの名無しさん
2014/05/25(日) 15:20:30.86ID:VdGWzfNyやりたいのはこういうこと?
http://ideone.com/x2YbQK
0098デフォルトの名無しさん
2014/05/25(日) 18:15:23.75ID:JrQwFRNG0099デフォルトの名無しさん
2014/05/25(日) 18:52:04.50ID:VdGWzfNyhttp://codepad.org/cRoDAq0S
をideoneに貼ったつもりだった。
ideoneのコードがなぜか消えている。。
0100デフォルトの名無しさん
2014/05/25(日) 19:18:05.82ID:JrQwFRNG0101デフォルトの名無しさん
2014/05/25(日) 22:28:26.35ID:VdGWzfNy0102デフォルトの名無しさん
2014/05/25(日) 22:38:14.80ID:JrQwFRNGポインタ型の動的配列を作りたかったんです
ポインタの配列なら*p[定数]で済むのに...
0103デフォルトの名無しさん
2014/05/26(月) 00:14:02.77ID:1AGAnN0M> ポインタ型の動的配列を作りたかったんです
なるほど。では>>99はあなたの「やりたいこと」とは違いましたね。失礼
0104デフォルトの名無しさん
2014/05/26(月) 03:02:25.50ID:8DsryLB1結果的に出力が同じになってるだけで、おそらくやらせたいだろうことはしてないぞ
0105デフォルトの名無しさん
2014/05/26(月) 03:27:06.87ID:8DsryLB1一部期待した動作をしてないであろう箇所があるってのが正しかったな
今のままだと>>89のコードでいう31行目の確認は意味のないコードになってる
正しくは
for( i=0; i < len; ++i )
{
printf( "%c", **(pp+i) ); // もしくはprintf( "%c", *pp[i] );
}
printf( "\n" );
だと思う
あと将来的に関数fを、ppのアドレスを返すように改造する場合は
bが一時オブジェクトだからこのまま返すわけにはいかないんじゃないかな
0106デフォルトの名無しさん
2014/05/26(月) 03:37:33.44ID:UJEeKjCahttp://codepad.org/hGzuz6di
0107デフォルトの名無しさん
2014/05/26(月) 03:42:29.23ID:8DsryLB1これ見て思ったけどfor文++iじゃなくてi++にするべきだったわすまん
突然書く人変わってるって疑われるわ
0108デフォルトの名無しさん
2014/05/26(月) 03:45:34.13ID:Pt2kiZ/o0109デフォルトの名無しさん
2014/05/26(月) 03:48:06.77ID:8DsryLB1今どきのコンパイラならどうせどっちで書いたって最適化してくれるんじゃねって思うしな
0110デフォルトの名無しさん
2014/05/26(月) 05:14:13.42ID:UJEeKjCa0111デフォルトの名無しさん
2014/05/26(月) 07:04:07.96ID:FZT5gfTQ0112デフォルトの名無しさん
2014/05/26(月) 07:14:41.63ID:fNjo4Ias1行にそれしか書かないようにしてる
0113デフォルトの名無しさん
2014/05/26(月) 10:44:45.62ID:jXHZxPTVポインタとかでない限り問題なかろう
0114デフォルトの名無しさん
2014/05/26(月) 12:33:31.87ID:LnM16LwKクラスだと、前置インクリメントオペレータしか作らないことが多い。
後置だとコピーしないといけないからね。
0115デフォルトの名無しさん
2014/05/26(月) 16:08:00.12ID:4UfKpyVP0116デフォルトの名無しさん
2014/05/26(月) 19:31:29.48ID:BEet9unMpathfileexistsを使ってサーバーの共有フォルダ内のファイルの存在をチェックしているんですが、
自分のPCだと問題なくファイルを確認できるのに、ほかのPCに持っていくと
ファイルは存在しているのにfalseが返ってきてしまいます…
パスワードもないしエクスプローラから問題なく見えるのですが何が原因分かりませんか?
0117デフォルトの名無しさん
2014/05/26(月) 20:15:22.36ID:fNjo4Ias0118デフォルトの名無しさん
2014/05/26(月) 21:15:31.18ID:yHJImmyi0119デフォルトの名無しさん
2014/05/27(火) 08:10:02.80ID:VBK+BNJs副作用がでかい?
用語はちゃんと理解した方がいいぞ。
0120デフォルトの名無しさん
2014/05/27(火) 08:41:05.45ID:zuChiLjA最近聞きかじって使いたくなったんだろ。
0121デフォルトの名無しさん
2014/05/28(水) 01:39:04.87ID:1069+ikWそのクラスを生成しなくても
そのstatic変数はプログラム実行時に生成されるの?
0123デフォルトの名無しさん
2014/05/28(水) 01:54:43.56ID:m/PVkgzFfi.Delete ();
StreamWriter sw = fi.AppendText();
sw.Write("テキスト");
sw.Flush();
sw.Close();
このように書いて作成されたファイルの文字コードが、
UTF-8 になってしまいます。
調べたら、そもそも StreamWriter は UTF-8 で書きこむ、とありました。
記録するときのエンコードをシフトjisにするにはどうしたらいいでしょうか。
new するときに文字コードを指定する方法はありましたが、
上記のような流れのときにエンコードを指定する方法がわかりません。
0124デフォルトの名無しさん
2014/05/28(水) 02:06:07.33ID:KYfVKk6vhttp://dobon.net/vb/dotnet/file/writefile.html
0125デフォルトの名無しさん
2014/05/28(水) 02:10:40.08ID:a7wYHcWSvirtualつけると関数コール時に仮想関数テーブル参照することになって遅くなるしインスタンスのサイズも少しでかくなる
10回や100回程度ならそんなにだが1万回呼ぶとかになると結構でかい
詳しく知りたいなら仮想関数テーブルでググればいっぱい出てくるんじゃね
>>123
そもそもFileInfo通す必要あるのか
ファイルのパスが分かってるならそれをもとにStreamWriterを新しく作ればいいと思うんだが
StreamWriter^ writer = gcnew StreamWriter( ファイルパス, true, Encoding);
あとこれ本当にC++/CLIか?gcnewじゃなくてnewなあたりC#くさいんだが
0126デフォルトの名無しさん
2014/05/28(水) 02:18:23.46ID:KYfVKk6v定義した時だね
struct A { static int a; }
なら
int A::a;
とかで定義するのでグローバル変数と同じ扱い
0127デフォルトの名無しさん
2014/05/28(水) 02:24:40.32ID:7s/YdHrOJava ならクラスのstatic な変数は実行時に "自動的に" に生成されるが
C++ はクラス定義とは別にプログラマが自分で実体を定義してやらねばならない = >>126
0128デフォルトの名無しさん
2014/05/28(水) 03:31:40.55ID:1yf3kB3k移転のあおりで消えたレス
> >>65
> vtbl参照するポインタ一つとdeleteする時の参照コストは増えるけど…
> ポインタ一つのメモリ量気にする場所でクラス使うなやって感じだし、
> パフォーマンス気にする処理の中でnew/delete連発もしちゃ駄目でしょ。
>>125
仮想関数テーブルを経由するのはvirtual付いてるメソッドだけだから、
デストラクタだけに付けててそれが乱発されるって設計の時点でパフォーマンスは投げ捨て済み。
あと仮想関数テーブルは同一クラスのインスタンス間で共有してたりするから、
その場合インスタンスあたりのメモリ消費の増加はポインタ1個とかのオーダになる。
これが問題になるケースというのもやはりその時点でパフォーマンスは投げ捨て終わってると思う。
0129デフォルトの名無しさん
2014/05/28(水) 04:29:03.02ID:a7wYHcWS数千単位のデストラクタ呼び出しを毎フレーム乱発することなんてまずないけど
数千を何セットか確保した結果の数万をあるタイミングで一気に解放するってケースは稀ではあるもののなくはないと思うが
そういう時にvirtualしてなきゃ速度をずいぶん改善できることはあるだろ。まあ大抵そもそもテンプレートでの実装とか代替案がでるとは思うが
あと大きくなるってのはまさにそのポインタ1個分だからな。これも圧迫されうるのは積もり積もったときだけで数百程度だったら気にするだけ無駄だが
0130デフォルトの名無しさん
2014/05/28(水) 04:43:24.82ID:1yf3kB3k何処でロスが出るか完全に制御してクラス使う人は「デストラクタ全てvirtual」なんて選択肢は端から無いだろうし、
数万単位の情報を速度重視で扱うなんて状況で1個1個クラスにして欲しくねぇわ…ってのは贅沢な願いなのかな?
0131デフォルトの名無しさん
2014/05/28(水) 08:37:08.02ID:m/PVkgzFそれは試しました。
ユニティ上ではエラーなくビルドできるのですが、
StreamWriter sw の部分で何故かこけてしまいます。
ファイルのパスなどは、UTF-8でちゃんと動いているので問題ないかと思ってます。
>>125
確認しました、ご明察のとおり、C++ ではなく C# のようです。
あと、ユニティとアンドロイドで開発してます。
FileInfo をなぜ使っているのか解らないのですが、
124 の方も教えてくれたサンプル通りにやっても実機で動きませんでした。
C# なら、別のスレッドに質問した方がいいですか?
0132デフォルトの名無しさん
2014/05/28(水) 08:50:12.08ID:1yf3kB3k0133デフォルトの名無しさん
2014/05/28(水) 10:25:12.68ID:a7wYHcWSそれだから>>65だろ
0134デフォルトの名無しさん
2014/05/28(水) 10:38:41.31ID:36F+cvJj0135デフォルトの名無しさん
2014/05/28(水) 13:15:04.06ID:mspF09G9JavaかVBスレの方がまだマシ
0136デフォルトの名無しさん
2014/05/29(木) 07:59:14.44ID:82BFXyhlってヘッダーの先頭に一回書くだけでいいんですよね?
下に示すような書き方しているのを見たことがあります。
何か意味があるのでしょうか?
-----あるヘッダファイル-----------
#pragma once
class A{
...
};
#pragma once
class B{
...
};
#pragma once
class C{
...
};
#pragma once
...
0137デフォルトの名無しさん
2014/05/29(木) 07:59:44.46ID:QaxywJR90138デフォルトの名無しさん
2014/05/29(木) 10:44:05.16ID:GJ6Azonc0139デフォルトの名無しさん
2014/05/29(木) 11:52:52.99ID:hGrR3Csk知らない人を惑わせたという点で有害
0140デフォルトの名無しさん
2014/05/29(木) 12:28:05.73ID:zblOCN9Gとりあえず virtual つけとけば問題なくない?
これでエラーが出ることある?
0141デフォルトの名無しさん
2014/05/29(木) 12:38:42.20ID:QaxywJR90142デフォルトの名無しさん
2014/05/29(木) 13:14:28.94ID:hGrR3Csk個人製作に限るならあえて止める理由はない
0143デフォルトの名無しさん
2014/05/29(木) 14:35:59.19ID:GJ6Azoncそれで遅くなるような状態ならどうせそれ以外にも遅くなる要因が山ほどあるだろうし
0144121
2014/05/29(木) 15:52:06.88ID:zblOCN9Gstatic変数でも解放されて使えなくなるよね?
0145デフォルトの名無しさん
2014/05/29(木) 16:01:21.88ID:EFZu1tJU0146デフォルトの名無しさん
2014/05/29(木) 16:12:04.91ID:hGrR3Csk0147デフォルトの名無しさん
2014/05/29(木) 16:55:56.41ID:ZPfW7Hu7staticメンバーのデストラクタはプログラム終了時にatexitみたいな仕掛けで呼ばれる。
0148121
2014/05/29(木) 18:00:10.69ID:zblOCN9G{
public:
static int abc;
};
このCtestを動的に生成した場合
変数 abc は static だからグローバルになり
生成したCtestが解放された時に abc も解放されて使えなくなる?
0149デフォルトの名無しさん
2014/05/29(木) 18:52:26.84ID:zEmhoXcPabcはCtestのインスタンスと無関係
0150デフォルトの名無しさん
2014/05/29(木) 22:26:40.17ID:lsho9ypK0151デフォルトの名無しさん
2014/05/30(金) 00:38:38.09ID:iU8Ve7Yvつ>>127
class Ctest
{
public:
static int abc;
};
だけでなく、
int Ctest::abc;
をC++ならば必ずどこかに書く
これはグローバル変数だから Ctest::abc は解放されることはない
実際の使用例
http://peace.2ch.net/test/read.cgi/tech/1313183984/449
0152デフォルトの名無しさん
2014/05/30(金) 04:22:02.59ID:p0YChy7Bforを使って1^m+2^m+3^m+......+n^mを求めたいんですがこれのどの部分に問題がありますか?
ご教授お願いします。
http://codepad.org/ZibSLvWH
0153デフォルトの名無しさん
2014/05/30(金) 04:44:42.16ID:nHre9iMgあんたの頭。
変数mの振る舞いに注意。
0154デフォルトの名無しさん
2014/05/30(金) 09:01:09.24ID:/LPGh+780155デフォルトの名無しさん
2014/05/30(金) 14:52:39.25ID:tQtZpcuAhttp://ideone.com/Elx3J3
0156148
2014/05/30(金) 15:37:30.61ID:9ztPnSR9class Ctest
{
public:
static int abc;
};
///// test.cpp /////
int Ctest::abc = 100;
staticメンバーの変数はこういうことで
Ctestクラスの生成、解放関係なしに
プロプラム実行時から終了時までグローバルで使えるってことでOK?
0157デフォルトの名無しさん
2014/05/30(金) 16:32:06.84ID:lPnoVdIE0158デフォルトの名無しさん
2014/05/30(金) 18:23:18.60ID:VP4sRqxG0159デフォルトの名無しさん
2014/05/30(金) 21:38:27.59ID:I46UGUDynew Ctest
delete Ctest
ここでどうやって使うん
0160デフォルトの名無しさん
2014/05/30(金) 21:43:22.93ID:BLHBUUhB0161デフォルトの名無しさん
2014/05/30(金) 21:44:38.26ID:2FpmCful0162デフォルトの名無しさん
2014/05/30(金) 22:20:18.99ID:I46UGUDyCtestはもう死んでるやん?
0163デフォルトの名無しさん
2014/05/30(金) 22:27:13.46ID:BLHBUUhB0164デフォルトの名無しさん
2014/05/31(土) 06:08:17.29ID:DtdLdmhz0165デフォルトの名無しさん
2014/05/31(土) 15:40:42.88ID:6LzyMI+60166デフォルトの名無しさん
2014/05/31(土) 16:06:10.51ID:A8nmKroG無限ループの中に何か処理を入れるようなものを作るのでしょうか
0167デフォルトの名無しさん
2014/05/31(土) 17:21:00.95ID:Udt15ViO日本語でOK。
環境も合わせて書いとくれ。
0168デフォルトの名無しさん
2014/05/31(土) 17:43:02.08ID:zlcjKUg4タスクって言い方からすると組込か
0169デフォルトの名無しさん
2014/05/31(土) 17:53:59.88ID:WaVhhm580170デフォルトの名無しさん
2014/05/31(土) 17:59:10.71ID:A8nmKroGC++MFCのプログラムで無限ループしているところがあります。
ここに時間が来たかどうかの判断を入れるのが普通なのかどうなのかと思いまして
0171デフォルトの名無しさん
2014/05/31(土) 18:27:46.99ID:6LzyMI+60172デフォルトの名無しさん
2014/05/31(土) 18:41:44.06ID:zlcjKUg4ある時間経過後なのか
0173デフォルトの名無しさん
2014/05/31(土) 19:00:40.55ID:A8nmKroGWINAPIのCreateWaitableTimerを使うという記事をネットで見つけましたが
これは使っていいんでしょうか
0174デフォルトの名無しさん
2014/05/31(土) 20:25:19.56ID:odnG7Cix0175デフォルトの名無しさん
2014/05/31(土) 20:39:16.31ID:WaVhhm58夏時間はどうする?
0176デフォルトの名無しさん
2014/05/31(土) 20:52:34.96ID:TLo1GTQAスレッド立てて指定時間まで待機
指定時間を過ぎたら実行
終了時に次の実行時間を指定ですね
0177デフォルトの名無しさん
2014/05/31(土) 22:53:07.90ID:Km8CFKFDa.txt b.txt
>patch <x.patch
>ls
a.txt b.txt c.txt
こんなx.patchって作成できる?
0178デフォルトの名無しさん
2014/05/31(土) 23:12:31.07ID:Udt15ViO例えば、こんなの。
--
#!/bin/sh
touch c.txt
--
こいつをどこか、パスの通るカレント以外の場所に置けばいい。
0179デフォルトの名無しさん
2014/05/31(土) 23:25:17.31ID:zlcjKUg4だったら円周率を10桁まで計算して表示するプログラムは
printf("3.1415926535\n");
でいいのか
0180デフォルトの名無しさん
2014/05/31(土) 23:37:41.77ID:Udt15ViOその例だと、「計算して」の題意を満たしていないな。
せめて、こんなもんだろ。
--
#include <stdio.h>
#include <math.h>
int main()
{
printf("%.10f\n", atan(1) * 4);
return 0;
}
0181デフォルトの名無しさん
2014/05/31(土) 23:47:30.16ID:Km8CFKFDたぶんできたわ
0182デフォルトの名無しさん
2014/06/01(日) 20:21:39.15ID:EoOyig9q%.o : %.cpp
(rule)
のように汎用的に書いておき、ある特定のソースコードはコンパイルオプションを変えたい場合
Makefileはどのように書けば良いでしょうか?
上記の記述に加えて、そのソースコードのコンパイルルールを加えただけだと無視されてしまいました。
0183デフォルトの名無しさん
2014/06/01(日) 23:25:25.96ID:NTS0Pzbx上手くいきません。
DLLの中の関数呼び出し自体は別プロジェクトでmain作ってDLLインポートして・・
で、出来るんですが。呼び出し先のソースを見れません。何か良い方法は
ないでしょうか?
0184デフォルトの名無しさん
2014/06/01(日) 23:31:47.86ID:gjlX7ty80185デフォルトの名無しさん
2014/06/01(日) 23:32:16.49ID:+IEDdSur0186デフォルトの名無しさん
2014/06/01(日) 23:35:11.99ID:+IEDdSur→mainでデバッグ開始
→mainでLoadLibrary
→DLLの関数を呼び出す
→ブレークポイントで止まる
どこまでやってどうなるのか
0187デフォルトの名無しさん
2014/06/01(日) 23:37:26.91ID:NTS0Pzbx>> 185 DLL内部のソースをSTEP実行できないんです。
0188デフォルトの名無しさん
2014/06/01(日) 23:51:02.96ID:Vdytlm3J0189デフォルトの名無しさん
2014/06/02(月) 22:59:40.91ID:9EWfIjsq0190156
2014/06/09(月) 01:16:03.43ID:YH45DqQSstaticメンバーはCtestの生成、解放関係なしにグローバルで使えて
static以外のメンバーは、普段通りCtestを生成すると使える
ってことで良いんだよね?
0191デフォルトの名無しさん
2014/06/09(月) 14:31:57.02ID:CV1N0NlNstd::functionという理解であってますか?
0192デフォルトの名無しさん
2014/06/09(月) 22:14:19.25ID:2baEZhQu「グローバルで使える」ってのが微妙だが、その通りです
記憶クラス的に
>>191
ちょっと捉え方が間違ってるような
テンプレートで指定した戻り値、シグネチャで呼び
出せるのものであれば、なんでも入れられるのがfunction
静的な関数、関数オブジェクトが該当する
ラムダもコンパイル時に関数オブジェクトを生成ので同じように使える
インスタンス関数の場合、mem_fn+bindで、関数オブジェクト化、
インスタンスへの参照固定で入れられる
0193デフォルトの名無しさん
2014/06/09(月) 22:48:16.12ID:2baEZhQuこれがあるから安全で生産性も高くなるんだろうけど、
ちょっとでも違えば許してもらえない
たとえばObserverパターンとかで、コールバックを登録したいとする
ここでも型が問題になる
functionは型を消してしまえるんだな
ただし若干、オーバーヘッドがある
単純に関数に渡すファンクタが必要なのであれば、ラムダで
書いた方がよい
高速です
0194デフォルトの名無しさん
2014/06/10(火) 18:33:14.20ID:ExSiC/cXその中身の特定のファイルを指定して読み出したり、あるいは、
その特定のファイルを上書きしてZIPファイルを書き換えたり
したいのですが、どうすれば出来ますか?
0195デフォルトの名無しさん
2014/06/10(火) 18:38:38.30ID:hzZkSFog0196デフォルトの名無しさん
2014/06/10(火) 20:09:14.96ID:nP1d3r8OD/T(1<=T<=2百万,1<=D<=100)を何個か比較演算したいです
0197デフォルトの名無しさん
2014/06/10(火) 20:43:52.27ID:Q6yCJgce0198デフォルトの名無しさん
2014/06/10(火) 20:59:52.84ID:p3jSqJSc文字列なら簡単だ。
0199デフォルトの名無しさん
2014/06/10(火) 21:03:49.73ID:hzZkSFog0200デフォルトの名無しさん
2014/06/10(火) 21:14:10.96ID:nP1d3r8O0201デフォルトの名無しさん
2014/06/10(火) 23:00:55.72ID:nP1d3r8O0202デフォルトの名無しさん
2014/06/10(火) 23:06:04.53ID:hzZkSFog0203デフォルトの名無しさん
2014/06/10(火) 23:11:03.68ID:nP1d3r8O0204デフォルトの名無しさん
2014/06/10(火) 23:15:13.67ID:j8iOZPUp自分で作りなよ、ゆー
0205デフォルトの名無しさん
2014/06/12(木) 19:54:09.97ID:ZrIHv0PNhttp://codepad.org/ZTZs3nU4
POJなんですけど このコードがg++だと通ってc++だとコンパイルエラーでます
g++ってどんな補完あるんでしょうか
0206デフォルトの名無しさん
2014/06/13(金) 23:22:35.20ID:OcgplV8Ysqrt()の中身int型整数を少数型にキャストしなければならないようで
0207デフォルトの名無しさん
2014/06/14(土) 00:31:06.98ID:bcTe5xiu例えば、、、四角形を親とするクラスがあってその子どもが長方形と台形を持つとします。
四角形
メンバ変数
上辺、下辺、左辺、右辺、角度
機能
面積計算
周りの長さ計算
対角線を計算
台形のメンバ変数、高さ:長方形のメンバ変数なし、機能:面積計算
台形のコンストラクタで四角形
のメンバ変数を初期化?する、四角形の機能で計算、、四角形で辺だけをreturnする関数
を作り、台形の面積計算に必要な辺をうけとる
その後また長方形のコンストラクタで四角形を初期化?
こんな感じの考え方でよいのでしょうか、、、
もう自分で書いてて意味わからないのですが、エスパーの方教えてください。
もしくは四角形継承台形長方形、長方形の継承正方形のプログラムを教えてください。
main
で
コンストラクタで
長方形(double 辺、double 辺、、、):四角形(辺、辺){}
といった書き方でよいのでしょうか
0208デフォルトの名無しさん
2014/06/14(土) 10:28:53.72ID:h7hlzhCn>少数型
そんなもの(二重の意味で)ない。
0209デフォルトの名無しさん
2014/06/14(土) 10:46:35.46ID:ghLFWdur0210デフォルトの名無しさん
2014/06/14(土) 12:04:18.29ID:vn/Wi9/b少と小
この二点じゃないかなぁたぶん
0211デフォルトの名無しさん
2014/06/14(土) 12:47:48.04ID:9xl6N+lzクラスはCの構造体に次の二つの性質を追加した新しいデータ型
・ メンバー変数のアクセス制御できる
・ メンバーとして変数の他に関数も持つことが出来る
基本、メンバー変数はメソッド(関数)を通じてのみアクセスして、呼び出し側が意識する必要がないように
するのがオブジェクト指向…というかカプセル化かな?
基底クラス(親クラス)をベースにして、メンバー変数・関数を追加して新しいクラス(子クラス)を定義するのが継承
四角形・台形の比喩は‥ ごめん、わからん
0212デフォルトの名無しさん
2014/06/14(土) 12:52:23.31ID:7sAVuJQO図形なら、まずは、大きさと描画関数だけあればいいんじゃね
オブジェクトをどう利用したいのかによって、完成形は異なるんだから、
まずは「拡張できる」ように作ることを考える
ゲームを想定して、図形がキャラクタだと思って全体を構成してみたら?
なお、オブジェクト指向なんて、その方が使いやすい場面で使えば十分だ
無理に教科書的な例から学ばなくても、現実ではよく出会う
0213デフォルトの名無しさん
2014/06/14(土) 13:18:44.42ID:9xl6N+lzたとえば、すべての【人間】に共通で、最低限の情報は「名前」「年齢」「性別」くらい?かな
これらをメンバー変数に、変数をR/Wする関数をメンバー関数として(人間)クラスが定義できますよね
新しく【学生】を定義する必要があるとして
一から作ってもいいけど、せっかく(人間)クラスがあるんだから、これに必要な情報(変数)やメソッド(関数)を追加してやれば手抜きできると‥
(人間)クラスに、たとえば「学校名」「学部」「学科」「学年」「学位」を示す変数と、これらにR/Wするメンバー関数を追加してやれば
(学生)クラスが定義できるわけです
【学生】も【人間】だから、人間の属性を継承するということ
わかりにくかったらすまん
0214デフォルトの名無しさん
2014/06/14(土) 13:28:08.28ID:BuWNtkHZ人間クラス専用のファイルがあったとする
人間クラスに学生情報を追加した学生クラスにしたとする
別の機会に人間クラスに人種情報を追加して人種クラスを作成する必要が出たとする
この時既に人間クラスは学生クラスに置き換わってる
こんな衝突を経験して頭がおかしくなる
0215デフォルトの名無しさん
2014/06/14(土) 13:31:24.42ID:RWrtwXRCSQL-Server の smallint 型とか (w
0216デフォルトの名無しさん
2014/06/14(土) 13:57:40.90ID:hFdfnZbt0217デフォルトの名無しさん
2014/06/15(日) 00:26:42.99ID:T2fwcVku0218デフォルトの名無しさん
2014/06/16(月) 15:25:13.12ID:kM7IOeM2char *b = a;
プログラムの一部に↑というのがありました。
先頭のアドレスを*bに代入?とよく分からなかったのですが、
char *b;
b=a;
としても同じ結果になって、省略できるのかな?と思いました。
他のサイトでは、
char *b="ABC";みたいな記述もあったような。
char *b;
b="ABC";
で、文字列の先頭のアドレスをbに代入してるということでしょうか?
0219デフォルトの名無しさん
2014/06/16(月) 15:30:51.00ID:H3LgDS+rchar *b;
b = a;はやってる事は一緒
char *b = "ABC";はできるが
char *b;
b = "ABC";はできない
0220デフォルトの名無しさん
2014/06/16(月) 15:36:17.89ID:kM7IOeM2ありがとうございます。
今書いてて、エラーは出ずに実行できたのですが、
書式は間違ってる(サポートされてない)ということでしょうか。
#include <stdio.h>
int main(){
char *b;
b="ABC";
printf("%s %s\n",&b[0],b); //どちらも先頭のアドレスを渡して文字列を表示
printf("%c %c %c %c\n",*b,b[0],b[1],b[2]); //*bに%sではエラー。*bとb[0]はどちらも1文字目を表示。
printf("%p %p %p %p %p\n",b,b+1,b+2,b+3,b+4); //アドレスに配列が格納されていない部分も表示できる。
return (0);
}
0221デフォルトの名無しさん
2014/06/16(月) 15:41:16.55ID:kM7IOeM2ちなみにここでした。
>char *s;
>s = "ABC";
一応サポートはされているんですかね。
0222デフォルトの名無しさん
2014/06/16(月) 15:48:06.37ID:wXHrgiMzもうやめて、>>219のライフはゼロよ
0223デフォルトの名無しさん
2014/06/16(月) 21:22:50.87ID:9t16BPS6もうおらんかな?
エスパーでない初学者ですが、自分の練習も兼ねて書いてみました。
メンバ変数を辺で持ったり、対角線を求めるのは出来なかったので
頂点座標を使って面積と周囲長だけ適当に書いてます。
http://codepad.org/mykX2VDE
余計かもだけど親クラスを四角形クラスにしない場合も貼っときます。
http://codepad.org/lm2cxeEM
これだと座標データは派生クラスで持つ必要があるけど、丸や三角形でも
扱えるから使い方によっては楽かも。
0224デフォルトの名無しさん
2014/06/16(月) 23:07:32.01ID:FBqd5r20なるほど、ありがとうございます
0225デフォルトの名無しさん
2014/06/16(月) 23:24:56.12ID:FBqd5r20なるほど、ありがとうございます
仮想関数について
http://codepad.org/IDh8dIdP
これなのですが上の派生クラスSUPERのポインタを宣言とありますが、TEST
とかいてあるのでTESTのポインタではないのですか??
また、下のほうの
test[0] = new TEST;
test[1] = new SUPER;
はオブジェクト的にはどっちのオブジェクトになっているのでしょうか?
私の考えは、両方TEST型で
test[1] = new SUPER;
は派生も入っているので基底クラスに行った後virtual関数が基底の
をオーバイライド?したのだと思っています。この考え方でよいのでしょうか
0226デフォルトの名無しさん
2014/06/17(火) 00:06:29.07ID:x7Tm4gn4virtual関数をメンバーに持つクラスは、仮想テーブルが作られる
virtual関数と同型と見なせる関数を派生クラスで定義するのが、オーバーライド
オブジェクトは、new した方の型だから、test[1] は SUPER
ポインタや参照経由で TEST クラスへのアクセスする場合、
仮想テーブルを辿って本来の型SUPERの関数を呼び出すようになっている
0227デフォルトの名無しさん
2014/06/17(火) 02:48:13.60ID:jLYVWX8Uコメントは基底クラスTESTだと思います。
オブジェクトの型については>>226が書かれたようにnewした方の型なので
・test[0] : TEST型
・test[1] : SUPER型の内、TEST型で定義の範囲だけ
をポインタから扱えるのだと思います。
TEST型なのにSUPER型の関数が呼ばれるのは仮想関数テーブル(VMT)の為で、
virtual がつくとoutput関数はVMTを介して呼び出されるので
・TESTクラスのコンストラクタ実行時->VMTにはTEST::output()へのアドレス
・SUPERクラスのコンストラクタ実行時->VMTにはSUPER::output()へのアドレス
へ書き換えられた為だと思います。
http://codepad.org/CKXyaOCe
自分の解釈だけで書いたので、詳しい方、訂正お願いします。
0228デフォルトの名無しさん
2014/06/17(火) 04:16:51.11ID:v9u3KVJshttp://codepad.org/I8IPVZCh
0229227
2014/06/17(火) 08:50:38.31ID:jLYVWX8Uあ、ほんとだ。言われるまで気づきませんでした。
ありがとうごさいます。
0230デフォルトの名無しさん
2014/06/17(火) 17:18:19.72ID:zLfMxzQt参考書に↑のようなprintf文が載ってました
%*sってどういう意味ですか?
また、3 * (i - 1) + 5で計算してる理由って何ですか?
iはint型変数です
0231デフォルトの名無しさん
2014/06/17(火) 17:35:18.74ID:LnB6vTqT3 * (1 - 1) + 5 = 5
printf("%5s", "");になる
*に計算結果が入る
0232デフォルトの名無しさん
2014/06/17(火) 17:45:36.12ID:zLfMxzQt理解できました
0233デフォルトの名無しさん
2014/06/17(火) 22:10:15.29ID:uAI2OXqBIXMLDOMDocument2Ptr で CreateInstanceを呼び出してもfailしてしまいます><
助けてください… ソースは↓みたうな感じです
#include <stdio.h>
#include "stdafx.h"
#include <afxdisp.h>
#import "MSXML6.dll" rename_namespace(_T("MSXML"))
#include <msxml6.h>
#include <iostream>
#include <sstream>
#include <fstream>
// 共通プロパティ 全般 共通DLLでMFCを使う
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
AfxOleInit()
//Create the XML
MSXML::IXMLDOMDocument2Ptr pXMLDoc;
HRESULT hr = pXMLDoc.CreateInstance(__uuidof(DOMDocument60));
if(FAILED(hr))
{
AfxMessageBox(_T("Failed to create the XML class instance")); //これが呼び出される
return 0;
}
return 0;}
0234デフォルトの名無しさん
2014/06/17(火) 23:37:15.63ID:UREG7bnw○MSXML::CLSID_DOMDocument
0235デフォルトの名無しさん
2014/06/17(火) 23:47:33.92ID:ZnAix8mp#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/transform_width.hpp>
typedef base64_from_binary<transform_width<std::vector<unsigned char>::const_iterator,6,8> > base64_text;
「virtual memory exhausted: メモリを確保できません」ってでるんだけど、なんで?
0236デフォルトの名無しさん
2014/06/17(火) 23:59:29.90ID:MCvb+eCN読んで勉強になる、ライブラリ以外のソースコードが知りたいのですが、何かオススメはあるでしょうか?
できれば比較的最近のもので、コンパクトだとありがたいです。
0237デフォルトの名無しさん
2014/06/18(水) 02:50:39.05ID:OD7nApX3コンパイルエラーで弾かれてしまいます…
>エラー 1 error C2039: 'CLSID_DOMDocument' : 'MSXML' のメンバーではありません。 d:\cloud\bp\xmltest\xmltest\xmltest.cpp 37 1 xmltest
0238デフォルトの名無しさん
2014/06/18(水) 12:33:25.00ID:/jpL5mxUttp://faithandbrave.hateblo.jp/entry/2014/06/16/155156
0239デフォルトの名無しさん
2014/06/18(水) 14:40:05.21ID:2sj5eCvL作業効率が良いように感じるんですが、みなさんどうですか?
0240デフォルトの名無しさん
2014/06/18(水) 16:19:47.82ID:LAmx7968面白いけど、実務では
switch (something) {
case FOO: x = 1; break;
case BAR: x = 2; break;
default: x = 3; break;
}
と書いて欲しい
0241デフォルトの名無しさん
2014/06/18(水) 16:40:59.04ID:c0sLB5UFその鱗ははめたままにしておきなされ
0242デフォルトの名無しさん
2014/06/18(水) 18:12:14.70ID:EaENCaWf0243デフォルトの名無しさん
2014/06/18(水) 22:51:57.76ID:b95ka0Af0244デフォルトの名無しさん
2014/06/18(水) 22:54:18.49ID:pJdwjV3r0245デフォルトの名無しさん
2014/06/18(水) 23:03:22.67ID:cO7v6OhKC++のやり方でやるならC++の方が使い易い
0246デフォルトの名無しさん
2014/06/18(水) 23:07:29.00ID:Uko284+o上位互換だからって使いやすいとは限らないだろ?
0247デフォルトの名無しさん
2014/06/19(木) 07:57:19.73ID:s8Zw40ia0248デフォルトの名無しさん
2014/06/19(木) 08:13:27.08ID:nGqFEu9yC++言語の設計者は、C++をシステム言語(OS、共通ライブラリなど)向けとして作ったと言ってる。
つまりそれ以外の用途だと、Cより苦労する。
まあ大抵の個人・組織は何故かシステムレベルの車輪の再発明からやってるんで、Cを使って更に苦労する訳だが。
0249デフォルトの名無しさん
2014/06/19(木) 10:06:54.74ID:uVoak4lNCはC++のサブセットだと思ってました
規格の改訂世代にもよるかと思いますが、C++にはなくてCに存在する仕様(機能)って例えば何がありましたっけ?
0250デフォルトの名無しさん
2014/06/19(木) 12:51:00.94ID:gmSqBbFa0251デフォルトの名無しさん
2014/06/19(木) 14:15:33.09ID:uVoak4lN0252デフォルトの名無しさん
2014/06/19(木) 16:30:13.57ID:ANGbOwOf0253デフォルトの名無しさん
2014/06/19(木) 17:24:03.27ID:SJ+Smgsh0254デフォルトの名無しさん
2014/06/19(木) 17:33:00.68ID:Brdb8B0I0255デフォルトの名無しさん
2014/06/21(土) 15:34:10.84ID:KMvjaKi+ちょっとしたものなら C# の方が楽と感じるけど、それなりの規模だとあまり変わらないかな
0256デフォルトの名無しさん
2014/06/21(土) 16:50:10.62ID:+tlHdBiNそんな、凝ったの書かしてもらってない。そう言えば自分のではC++機能使いまくりだった
0257デフォルトの名無しさん
2014/06/22(日) 03:46:49.39ID:n/T6EZNW0258デフォルトの名無しさん
2014/06/22(日) 12:07:54.36ID:fKkjonsJテンプレートは遅いね・_・
0259デフォルトの名無しさん
2014/06/28(土) 12:52:17.26ID:Z5Hu91SB0260デフォルトの名無しさん
2014/06/28(土) 23:53:51.23ID:E/3TLq27変わらない
0261デフォルトの名無しさん
2014/06/29(日) 08:55:20.94ID:KFRMJvcV変わらないシステムが圧倒的に多いだろうね。
但し、変わった事でプログラムの動作に支障が出るようなら、それはプログラムの
作りがおかしいという事である。
0262デフォルトの名無しさん
2014/06/29(日) 12:23:59.35ID:XFCViuqu0263デフォルトの名無しさん
2014/06/29(日) 12:38:08.93ID:K5dqtKQ70264デフォルトの名無しさん
2014/06/29(日) 12:51:05.82ID:KFRMJvcV全部に
マルチすんな!ヴォケ!
とレスするのが2chの作法、K&Rに書いてある。
0265デフォルトの名無しさん
2014/06/29(日) 12:56:09.95ID:d4tnsDO5> 変わらないシステムが圧倒的に多いだろうね。
変わるシステムなんてあるの?
そのオブジェクト参照されてる場合、勝手に変わられると困ると思うが。
0266デフォルトの名無しさん
2014/06/29(日) 13:20:20.11ID:XFCViuqu変わらない証拠おしえてください。
0267デフォルトの名無しさん
2014/06/29(日) 13:49:04.09ID:kMofjRV8文脈では仕様の話なんだが?
0268デフォルトの名無しさん
2014/06/29(日) 14:10:16.72ID:XFCViuqu0269デフォルトの名無しさん
2014/06/29(日) 21:44:12.38ID:vXcDBpcb0270デフォルトの名無しさん
2014/06/29(日) 22:32:21.70ID:KFRMJvcVwinのAPIにもあるGlobalLockやGlobalUnlockは、そういう用途に使ってたよ。
今はheapを使うのが普通だけど別にオブジェクトをここに作る事が絶対禁止な
訳じゃない、まあオブジェクトの参照をどう保持するかの問題だな。
システムというかCPUが不自由だとメモリの仮想化が不十分でプログラムが
「実行中に何度も別のアドレスに勝手にリロケートされる」なんてことも起こり
得たんだよ。
0271デフォルトの名無しさん
2014/06/29(日) 22:44:24.39ID:Hir1ALDw0272デフォルトの名無しさん
2014/06/30(月) 07:16:38.00ID:RRSpyW++GlobalAlloc とかのだとアクセスはメモリーハンドル使う訳で、普通の heap と違うでしょ?
そんなもんどや顔で出されても困るわ (w
0273デフォルトの名無しさん
2014/06/30(月) 16:39:38.34ID:OoeeUvmn0274デフォルトの名無しさん
2014/06/30(月) 19:51:06.53ID:K5zrSJWB君は理解の仕方が中途半端だね。
> アクセスはメモリーハンドル使う
真っ赤な嘘を広めてはいけない。
アクセスする為のポインタを得る為にメモリーハンドルを使うんだ。
君のようにメモリーハンドルでアクセスしたら例外で吹っ飛ぶよ?
0275デフォルトの名無しさん
2014/06/30(月) 20:32:11.67ID:S8arh0g0そんな当たり前の事を知らないなかとでも言うように説明する人が居るとはな
0276デフォルトの名無しさん
2014/06/30(月) 21:32:07.01ID:K5zrSJWB0277デフォルトの名無しさん
2014/07/01(火) 02:31:23.23ID:aHhEQ2XOVS2010で int が long int と同じになってた。
0278デフォルトの名無しさん
2014/07/01(火) 07:13:49.59ID:uMb52dFRハンドルとポインタの区別もつかんのか (w
0279デフォルトの名無しさん
2014/07/03(木) 23:02:29.48ID:2beLGnBnそうでないのは力仕事だし
(ネイティブに限る)コンパイラって何なんだろうって思う
0280デフォルトの名無しさん
2014/07/08(火) 21:18:40.46ID:JvR/NBCs最新のC++11まで含めて浅くでいいから広範囲に扱ってるサイトとかないかな
0281デフォルトの名無しさん
2014/07/08(火) 23:26:58.23ID:KPHElX/Pcplusplus.com
0282デフォルトの名無しさん
2014/07/09(水) 03:19:15.41ID:oP2kEIS8ありがとう。一瞬躊躇してしまったが比較的平易な英語で書かれていて
これなら翻訳サイトと併せてなんとか読めそうなのでがんばってみる
0283デフォルトの名無しさん
2014/07/09(水) 08:23:29.93ID:QPl72qxT英語サイトへ行くのはその次だ
0284デフォルトの名無しさん
2014/07/09(水) 14:41:27.65ID:eczUeSs+標準関数でそういうの無いですか?
0285デフォルトの名無しさん
2014/07/09(水) 15:30:20.52ID:aj4O2jpl先ず始めにお聞きしたいのですが、お使いの言語は何でしょうか。
Cでしたら、ありません。
0286デフォルトの名無しさん
2014/07/09(水) 16:32:23.48ID:sSBu2vKyつttps://sites.google.com/site/cpprefjp/
0287デフォルトの名無しさん
2014/07/09(水) 21:05:24.47ID:lRyDFvzOhttp://www.ncad.co.jp/~komata/c-kouza23.htm
などを参考にしてみるとか
0288デフォルトの名無しさん
2014/07/09(水) 21:56:20.52ID:75kwCoC7このコードを3つに分けてコンパイルすると メンバ関数未定義とコンパイルエラーでます
ggった通りにインクルードしてると思うのですがなにを間違えているのでしょうか
アドバイス頂けませんか
0289デフォルトの名無しさん
2014/07/09(水) 22:08:53.21ID:nVe34nkn使ってるコンパイラとエラーの内容がないから何とも言えん
0290デフォルトの名無しさん
2014/07/09(水) 23:12:26.78ID:75kwCoC7結構な時間ggってるのに見つけられない情弱さ嫌になるね
0291デフォルトの名無しさん
2014/07/10(木) 14:11:27.79ID:YR8w5b7eみたいに初期値を代入した配列の要素数3を
求める方法ありますか?
0292デフォルトの名無しさん
2014/07/10(木) 14:47:40.07ID:+wVx4yYhsizeof(array) / sizeof(* array)
0293デフォルトの名無しさん
2014/07/10(木) 14:53:22.59ID:YR8w5b7eありがとうございました。
0294デフォルトの名無しさん
2014/07/10(木) 16:28:49.65ID:TeSkcnCY0295デフォルトの名無しさん
2014/07/12(土) 22:48:46.26ID:MTjCae/M#ifdef NDEBUG
#define dbgprintf 1 ? (void)0 : (void) //(1)
#else // #ifdef NDEBUG
#define dbgprintf printf
#endif // #ifdef NDEBUG
よくわかりません。(1)の行はNDEBUGの時に出力しないようにしているようですが、
#define dbgprintf
としても同じじゃないですか?(1)の意味を教えて下さい。
0296デフォルトの名無しさん
2014/07/12(土) 22:58:05.24ID:m5S9HQxEdbgprintf("%d", func());
が
("%d", func());
になってしまう
0297デフォルトの名無しさん
2014/07/12(土) 22:59:07.97ID:wXyVo6GR0298デフォルトの名無しさん
2014/07/12(土) 22:59:49.53ID:wXyVo6GR0299デフォルトの名無しさん
2014/07/12(土) 23:14:44.12ID:MTjCae/M0300デフォルトの名無しさん
2014/07/12(土) 23:57:52.87ID:NSx3oKmy0301デフォルトの名無しさん
2014/07/13(日) 00:04:12.05ID:SsDCNXiH#include "stdafx.h"
#define dbgprintf 1 ? (void)0 : (void) //(1)
int func(){
return 1;
}
int _tmain(int argc, _TCHAR* argv[]){
dbgprintf("%d", func());
return 0;
}
0302デフォルトの名無しさん
2014/07/13(日) 00:06:25.36ID:b0K+GMLz0303デフォルトの名無しさん
2014/07/13(日) 00:07:03.38ID:SsDCNXiHそれが知りたいのですが。
#include "stdafx.h"
#define dbgprintf
int func(){
return 1;
}
int _tmain(int argc, _TCHAR* argv[]){
dbgprintf("%d", func());
return 0;
}
0304デフォルトの名無しさん
2014/07/13(日) 00:08:43.08ID:G9QhDNfC0305デフォルトの名無しさん
2014/07/13(日) 00:09:06.82ID:b0K+GMLzdefine展開後のソースをベタで書いて動かせばいーじゃない
0306デフォルトの名無しさん
2014/07/13(日) 00:11:43.83ID:SsDCNXiHなるほど。そうすると、funcの戻り値はどうなるんですか?
("%d", func());
が
("1");
になって、この後どうなるんですか?
0307デフォルトの名無しさん
2014/07/13(日) 00:15:05.28ID:SsDCNXiHint _tmain(int argc, _TCHAR* argv[]){
("1");
return 0;
}
で動きました。 ("1"); の行は、実行に影響ないんでしょうか?
0308デフォルトの名無しさん
2014/07/13(日) 00:29:57.79ID:b0K+GMLzない
voidキャストされる
無駄処理なだけ
0309デフォルトの名無しさん
2014/07/13(日) 00:37:10.72ID:G9QhDNfCどこから"1"が出てくるんだよ、この間抜け。
0310デフォルトの名無しさん
2014/07/13(日) 00:43:29.81ID:G76Sa1hjはfuncは呼ばれません。
0311名無しさん@0新周年
2014/07/13(日) 01:31:07.42ID:nrxOtUVn0312デフォルトの名無しさん
2014/07/13(日) 01:33:03.22ID:7UphRhX9話はそれからだ
0313デフォルトの名無しさん
2014/07/13(日) 02:03:15.70ID:psjBpgTU0314デフォルトの名無しさん
2014/07/13(日) 07:29:50.12ID:psjBpgTU今の所は値が書き変わっていません
2, VC++2010EEではコメントのようにキャストしないとエラーになるのですがどこを直せばいいですか?
ttp://ideone.com/2cbjRj
0315デフォルトの名無しさん
2014/07/13(日) 08:02:48.70ID:fGnnU/OX質問内容とソースとが対応していない、に1票。
0316デフォルトの名無しさん
2014/07/13(日) 08:57:51.52ID:0Iul1EJe2. エラーメッセージを書く。常識
0317デフォルトの名無しさん
2014/07/13(日) 10:39:54.60ID:SsDCNXiH有難うございました。
マクロ勉強中で、もう一つ教えてください。こんなマクロ見つけたのですが、
#define eqstr(a, b) (*(a) == *(b) && strcmp(a, b) == 0)
文字列が等しいかどうか調べるだけなら、
#define eqstr(a, b) (strcmp(a, b) == 0)
でいいと思うのですが、*(a) == *(b)は何ですか?
0318デフォルトの名無しさん
2014/07/13(日) 10:48:19.01ID:nn2UNRM40319デフォルトの名無しさん
2014/07/13(日) 11:04:10.62ID:SsDCNXiHchar a[]="1234";
char b[]="234";
とすると、
eqstr(a+1,b)は
strcmp(a+1, b)==0で
strcmp("234","234")==0で
等しいと判断されると思います。
0320デフォルトの名無しさん
2014/07/13(日) 11:34:51.98ID:iBUseW7gint **a = (int**)malloc( sizeof(int*) * 2); (�@)
a[ 0 ] = (int*)malloc( sizeof(int) * 2 * 3 ); (�A)
のように確保するといろいろなサイトで見かけました。
そこで行数列数未定の2次元配列を動的確保したいのですが、
�@と�Aの部分をreallocを使って再確保していこうとして失敗しました。
�@で最初に必要な行数を与えればうまくいくのですが、行数を1つずつ増やしていく方法はありませんか?
0321デフォルトの名無しさん
2014/07/13(日) 11:49:18.37ID:psjBpgTUideone用に書き換えてる間に直ったのかもしれません
お騒がせしました
>>320
リスト構造?
0322デフォルトの名無しさん
2014/07/13(日) 12:11:30.17ID:mc+PMj3L�Aはそんなにタップリ確保しなくていいよ。
aがどんな変数か考えると簡単かも。
↓この例だと、
一行分のデータへのポインタを、最初二個持ってて、
realloc後は三つもつことになる。
#include <stdio.h>
#include <stdlib.h>
int main(){
int i, j, **a = malloc(sizeof (int *) * 2);
a[0] = malloc(sizeof (int) * 3); // 一行割り当て
a[1] = malloc(sizeof (int) * 3); // 一行割り当て
for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) a[i][j] = i * 10 + j;
for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) printf("%d:%d %d\n", i, j, a[i][j]);
puts("");
a = realloc(a, sizeof (int *) * 3); // 行数を増やす
a[2] = malloc(sizeof (int) * 3); // 一行割り当て
for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) a[i][j] = i * 10 + j;
for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) printf("%d:%d %d\n", i, j, a[i][j]);
return 0;
}
0323デフォルトの名無しさん
2014/07/13(日) 12:23:37.32ID:iBUseW7g解答ありがとうございます
>>320に書いた確保の仕方は、メモリ領域に連続して確保するためのものでした分かりづらくすみません
なので�Aの後には、
for (i = 1; i < 2; i++) a[ i ] = c[ i-1 ] + 3;
このような処理が入り、全体のサイズを確保した後に、行を割り当てることになります。
おっしゃる通りの行ごとに列のサイズを確保し、メモリ領域が連続になっていない確保の仕方では、
プログラムはエラーをはかずに動作しました。
0324デフォルトの名無しさん
2014/07/13(日) 12:25:16.99ID:iBUseW7g×c[i-1]
○a[i-1]
でした
0325デフォルトの名無しさん
2014/07/13(日) 15:40:25.69ID:7UphRhX9多分ほんのちょっぴりでも高速化したいんだろ
普通のコーディングならそもそもマクロじゃなく関数にすべき
0326デフォルトの名無しさん
2014/07/13(日) 16:16:05.62ID:0Iul1EJe関数コールのオーバーヘッドがよほど気になる状況でも無い限り、
効果は薄いと思う。>>317 が興味があるなら、短絡評価を調べるといい。
マクロ自体は、strcmpのa,bの方は括弧でくくってないし、なんか中途半端
0327デフォルトの名無しさん
2014/07/13(日) 18:34:21.87ID:25pakNK6優先順位低いし
0328名無しさん@0新周年
2014/07/13(日) 19:38:19.95ID:XpdRKiat0329デフォルトの名無しさん
2014/07/14(月) 03:16:13.60ID:v6rlvCBe高速化のつもりだろう。しかし、最近のコンパイラではstrcmpはストリング命令に
インライン展開される(ことが多い)ので、かえって低速化を招く。
0330デフォルトの名無しさん
2014/07/14(月) 06:11:18.36ID:PQHLBfsn-marchオプションで使える時はそちらをリンクするようになっている
0331デフォルトの名無しさん
2014/07/14(月) 21:15:27.78ID:QdFaiwl3バッファリング?
0332デフォルトの名無しさん
2014/07/14(月) 21:53:25.57ID:dxRw1V7C0333デフォルトの名無しさん
2014/07/14(月) 22:52:44.27ID:kVP5lF+/最適化という機能があるよ
0334デフォルトの名無しさん
2014/07/15(火) 00:07:32.82ID:/VWMpkMOなんでもかんでもオンメモリー
0335デフォルトの名無しさん
2014/07/15(火) 12:25:59.43ID:zrHbAgn8読込量・回数を減らす…インデックスやハッシュの活用
予算が余ってるならRAIDを組む
メモリが余ってるならRAMディスクもあり
0336デフォルトの名無しさん
2014/07/15(火) 16:12:20.00ID:eA5jv2Nfとか言ってみる
0337デフォルトの名無しさん
2014/07/16(水) 09:34:20.91ID:b0IB8P330338デフォルトの名無しさん
2014/07/17(木) 00:36:59.90ID:OBbzwXpO0339デフォルトの名無しさん
2014/07/17(木) 01:09:36.88ID:bej3WA570340デフォルトの名無しさん
2014/07/17(木) 15:07:58.26ID:STDuRs09ソースをすっきりさせたいので、
ウィンドウプロシージャとかWinMainとか、
include以外の全部をDLLに投げ込んじゃってもいいんでしょうか?
0341デフォルトの名無しさん
2014/07/17(木) 15:17:12.77ID:to24R3x/0342デフォルトの名無しさん
2014/07/17(木) 15:46:04.62ID:en/jF64V0343デフォルトの名無しさん
2014/07/17(木) 17:58:00.24ID:wKNmXy3y鶏が先か卵が先かになってまう
0344340
2014/07/17(木) 19:43:39.87ID:STDuRs090345デフォルトの名無しさん
2014/07/18(金) 10:30:44.47ID:vLbu0UtM0346デフォルトの名無しさん
2014/07/18(金) 12:14:53.84ID:exI1hoJs0347デフォルトの名無しさん
2014/07/19(土) 00:19:29.13ID:AQ8sn0hT0348デフォルトの名無しさん
2014/07/20(日) 10:26:23.66ID:ErUz0FQn0349デフォルトの名無しさん
2014/07/22(火) 14:33:49.20ID:wIMHt4xr◎ +ニュース板
・ 2NN
・ 2chTimes
◎ +ニュース板新着
・ 2NN新着
・ Headline BBY
・ unker Headline
◎ +ニュース板他
・ Desktop2ch
・ 記者別一覧
◎ 全板
・ 全板縦断勢いランキング
・ スレッドランキング総合ランキング
・ ログ速
◎ 全板実況込み
・ 2勢
・ READ2CH
・ i-ikioi
※ 要サイト名検索
0350デフォルトの名無しさん
2014/07/26(土) 09:25:01.15ID:7jJs6tm2とあるソースコードに(Qtの一番上のサンプルです)
class MainWindow : public QMainWindow
{
private slots:
void newFile();
};
みたいな記述がありました。
private slots:
の、slotsとはなんでしょうか。
ググろうにも「C++ アクセス修飾子 付加」とやってもダメですし、打つ手がございません。
よろしくお願いいたします。
またこれがわからない人が学習しとくべき、関連した範囲へのキーワードがありましたら、1つか2つだけ教えて頂けると嬉しいです。
よろしくお願いします。
0351デフォルトの名無しさん
2014/07/26(土) 09:28:01.05ID:DTo922cRQtのチュートリアルなりリファレンスなりに解説あるだろ
0352デフォルトの名無しさん
2014/07/26(土) 09:31:02.23ID:1dyiAST7>>351 の言うように Qt の拡張みたい
0353デフォルトの名無しさん
2014/07/26(土) 09:45:43.76ID:7jJs6tm2迅速な回答ありがとうございます!!
拡張でそんなことが出来るものなのですね。驚きました。
知らない言葉の仕様かと思っていました。
private slots でググらせて頂きます。
合わせてチュートリアルも読むことにします(面倒臭がって、サンプルをざっと見て弄りたがったのが身の程知らずでした。)
ありがとうございました。
0354デフォルトの名無しさん
2014/07/28(月) 20:40:15.62ID:XrTiyw31出力
asdf6
jkl;2
361208
sizeofで期待したメモリサイズが帰って来ない 私が知らない知識をお教え願う
0355デフォルトの名無しさん
2014/07/28(月) 20:44:14.15ID:dfMBLDBO引数で[]は使うな
int[]はint*と同じだ
sizeof(ar)したところで配列の大きさは返ってこない
0356デフォルトの名無しさん
2014/07/28(月) 23:22:53.84ID:XrTiyw31可読性のために配列渡すときは[]を使用していました
今*に書き直して試したところ出力結果変わりませんでした
このsizeof(ar)はなにを返しているのでしょうか
0357デフォルトの名無しさん
2014/07/28(月) 23:30:36.36ID:CSMUGygm0358デフォルトの名無しさん
2014/07/28(月) 23:37:46.60ID:XrTiyw31wikipediaでヒントらしきもの見つけました
http://ja.m.wikipedia.org/wiki/Sizeof
完全型とかいう概念
0359デフォルトの名無しさん
2014/07/28(月) 23:42:27.60ID:nv6YBJ31ま、template関数使えば似たような事が出来なくは無いけどね。
0360デフォルトの名無しさん
2014/07/28(月) 23:43:07.48ID:XrTiyw31不完全型:オブジェクトを規定する型で,その大きさを確保するのに必要な情報が欠けたもの。
stdlibのqsortの引数がややこしいのは同じような理由でしょうね
0361デフォルトの名無しさん
2014/07/29(火) 00:42:38.49ID:bQIMdul60362デフォルトの名無しさん
2014/07/29(火) 01:06:14.11ID:s+4NszZe型情報と一緒にコンパイラが持ってんじゃねぇの
出力されたコード上では定数
C++だとさらに名前の中にマングリングして突っ込む
だけど、引数としての配列って不完全型云々じゃなくて暗黙のうちにポインタに変換されてたりしないか?
Cの仕様書持ってないからそのへんは知らんけど、不完全型へのsizeofならエラーじゃないのかと。
0363デフォルトの名無しさん
2014/07/29(火) 02:22:03.19ID:bQIMdul6不完全型については http://www.c-tipsref.com/words/incomplete_type.html
ここにそのものズバリ書いてあったので書きました このページが正しいのかはもう少しggってみます
0364デフォルトの名無しさん
2014/07/29(火) 18:40:51.49ID:s+4NszZe不完全型の説明が間違ってるって言ってる訳じゃないよ。
配列を引数に取ると不完全型の配列になるんじゃなくて、
完全型のポインタになるんじゃないのかって話。
これはC++になるけど、http://ideone.com/nMMdX1
ってコードで型情報を見てみるとbarとbazの型は同じになる。
VisualStudio2010のCL16.00だと
foo=4,type=int [1]
bar=4,type=int *
baz=4,type=int *
となる。
そしてfoo[]に変えて不完全型にするとどちらもエラーになる。
foo[]だけがsizeofがエラーになるのはTCCでも再現するよ。
0365デフォルトの名無しさん
2014/07/30(水) 00:56:26.47ID:rvJq7ZUr0366デフォルトの名無しさん
2014/08/11(月) 12:26:15.10ID:DM9hqstoD::C
とやりたいのだけどBとD両方で定義しないと駄目
Bだけで定義して両方使うにはどうしたらいいですか?
Bの派生がD
Cは定数
0367デフォルトの名無しさん
2014/08/11(月) 12:35:00.77ID:c42QUAiaclass D : public B {}
0368デフォルトの名無しさん
2014/08/11(月) 12:52:18.57ID:DM9hqsto0369デフォルトの名無しさん
2014/08/11(月) 12:54:43.75ID:4YE8xGEJ0370デフォルトの名無しさん
2014/08/11(月) 13:52:12.20ID:DM9hqstousing B::Cはメンテがかかるので
0371デフォルトの名無しさん
2014/08/11(月) 14:43:03.41ID:xLVZtjTF意味が分かんない
http://codepad.org/ilLpprw1
0372デフォルトの名無しさん
2014/08/11(月) 15:00:35.00ID:DM9hqsto基底クラスをテンプレートクラスにして
Cの型をlong longにして
100を静的関数にするとできないのかも
0373デフォルトの名無しさん
2014/08/11(月) 15:47:23.53ID:/6BMCSKz書き出しの部分
int nx=256;
int ny=256;
int nz=256;
int A[256][256][256];
FILE *fptr;
if((fptr = fopen("output.bin","w")) == NULL){ exit(1); }
fputc( (nx >> 8) & 0xFF, fptr);
fputc( nx & 0xFF, fptr);
for (int k=0;k<nz;k++) {
for (int j=0;j<ny;j++) {
for (int i=0;i<nx;i++) {
fputc( (A[i][j][k] >> 24) & 0xFF, fptr);
fputc( (A[i][j][k] >> 16) & 0xFF, fptr);
fputc( (A[i][j][k] >> 8) & 0xFF, fptr);
fputc( A[i][j][k] & 0xFF, fptr);
}
読み込みの部分(自分で考えてみましたがこれではだめでした)
int A_[256][256][256];
fin.open("output.bin", ios::binary);
fin.read((char*)&nx,sizeof(int));
fin.read((char*)A_,sizeof(int)*nx*ny*nz);
0374デフォルトの名無しさん
2014/08/11(月) 17:46:47.63ID:xLVZtjTF意味が分かんない、条件変わってるし。
>>373
未初期化変数をDumpしたいのかな?
int *p = &A[0][0][0];
でp++した時に指すのアドレスは
A[1][0][0]ではなくA[0][0][1]なので
ループが順番が逆
それと24,16,8,0順番だとビッグエンディアン固定になので
エンディアン判別の処理を入れるか普通にfwriteで書き込めばいい
0375デフォルトの名無しさん
2014/08/11(月) 20:22:59.15ID:PLjHWys5ありがとうございます。
事情があって書き出しのほうのソースは変更できないんです。
読み込みのソースをうまく修正して読むことができるようにはできませんでしょうか。
0376デフォルトの名無しさん
2014/08/11(月) 22:07:52.71ID:xLVZtjTFループを逆にしてntohlで変換するだけ
書き込み時と逆にやればいいだけでしょ?
0377デフォルトの名無しさん
2014/08/12(火) 01:54:38.79ID:sSgdt4Yu書き出し
・バイナリファイルをfopenするなら"w"じゃなくて"wb"とかにしといたほうが無難
・nxの上位16ビットおよびはny、nzの値は保存していないが問題ないのか
・Aの多次元配列がnx、ny、nzに無関係な固定値だけど問題ないのか
読み込み
・書き込みが"w"なのでios::binaryを付けて"rb"相当にしていると対称にならない
・nxの読み込みがsizeof(int)となっているが、intが16ビット以外だと正常動作しない
・書き込み側でnx、ny、nzが256以外に変更されてから出力されていた場合にサイズが一致しない
・書き込み側はビッグエンディアンで出力しているので、リトルエンディアンな環境では値が一致しない
素直に書き込みの逆をやったほうが簡単だし手っ取り早いと思うよ。
0378デフォルトの名無しさん
2014/08/12(火) 02:28:45.65ID:FJHkQfgsテキスト入出力かその辺か
0379デフォルトの名無しさん
2014/08/12(火) 05:50:37.85ID:sSgdt4Yuフレームワークや明確な作法に従ってないってだけで、
これはシリアライズ・デシリアライズそのものだぞ。
0380デフォルトの名無しさん
2014/08/12(火) 09:55:16.44ID:rfzbAqAvありがとうございます。
理解力が低くて申し訳ないですが、ビックエンディアンで書き出されたバイナリデータを
リトルエンディアンの環境(今読み込みをしようとしているPCの環境)で読み込むというこ
とでよかったですか。
nx,ny,nzは可変にしたいと思っています。とりあえず読み込みが成功したら取り組みます。
配列intXのほうはちょっとおいておいてnxがとりあえず読めるようにしたいです。
ifstream fin("input.bin");
if(!fin.good()) { cerr << "Couldn't open file.\n"; exit(0); }
else{
fin >> ntmp;
}
//nx=htonl(ntmp);
BiteSwapCalc B;
nx=B.biteswap(ntmp)
cerr << nx << endl; //256となっていることを期待しています。
linuxの今使っている環境でhtonlの関数が使えないので以下を使ってみました。
0381デフォルトの名無しさん
2014/08/12(火) 09:55:54.45ID:rfzbAqAvpublic:
int biteswap(int val){
//cerr <<"int"<< endl;
return ((val<<24) & 0xff000000) |
((val<<8) & 0x00ff0000) |
((val>>8) & 0x0000ff00) |
((val>>24) & 0x000000ff) ;
};
void ByteReverse(void *data, size_t nBytes)
{
unsigned char *low = (unsigned char*)data;
unsigned char *high = low + nBytes;
unsigned char temp;
while(--high > low) {
// *low と *high を交換する.
temp = *low;
*low++ = *high;
*high = temp;
}
};
0382デフォルトの名無しさん
2014/08/12(火) 13:48:26.60ID:46iLrj52しかも、クラスになっている意味がないし。
0383デフォルトの名無しさん
2014/08/13(水) 03:18:36.39ID:qwKsatq9そこでおすすめのGUIライブラリ教えてください。
今までWinAPIで色々作ってたけど、最近Macに乗り換えて、
大好きなCで何らかのアプリケーションを作ってみたいと思った。
出来れば色々便利なライブラリも教えてくれるとうれしいです。
0384デフォルトの名無しさん
2014/08/13(水) 03:29:30.48ID:9jHt6nG8補足、MS-DOSやWindowsではbを付けてバイナリモードにしないと0x1Aが操作できなくて死ぬ。
>>380
だーかーらー!C++でもCの関数使えるんだから、
わざわざC++で書きなおしたりせずに元の処理をそのまんま反転させろ!
http://codepad.org/XuyonTpI
Windowsだとrbにしておかないと0x1AがEOF扱いになってそれ以降が読めないし、
読み込みがrbで書き込みがwだと0x0Aが0x0D 0x0Aに変化してしまう。
Unixしか触りませんって宗教じゃないなら、保存の側をwbに変更させとけ。
Windows上でwで書いたファイルをrbで読んでCRLFをLFに変換するコード書いてもいいけど、
本題全く関係ないバッドノウハウだからどう考えてもwb-rbにした方がいい。
nxに関してだが、readで読んでたところよりも悪化してる。それは文字列の読み込みだ。
そもそも、int(恐らく32bit=4byte)を16bit=2byteで保存してるんだから普通にintとして読めるわけがない。
shortで読んでからintにキャストしつつバイトオーダを修正するか、元と同じようにバイト単位で読んどけ。
0385デフォルトの名無しさん
2014/08/13(水) 04:31:24.23ID:0qU1zyd80386デフォルトの名無しさん
2014/08/13(水) 04:37:11.79ID:gAzc5rgf0387デフォルトの名無しさん
2014/08/13(水) 04:37:50.22ID:R+B95mq6size_tと同じ、中身がアドレスってだけ
0388デフォルトの名無しさん
2014/08/13(水) 15:46:15.69ID:TZPZmb+yもちろん開発者の責任
0389デフォルトの名無しさん
2014/08/13(水) 15:55:54.87ID:6MzZRjgoCSamp *samp[5]; // グローバル
samp = new CSamp[5];
CSamp[0]->func();
とした時に
func()
{
this[0] == samp[0]
this[1] == samp[1]
this[2] == samp[2]
this[3] == samp[3]
this[4] == samp[4]
}
これは保証されてる?
0390デフォルトの名無しさん
2014/08/13(水) 17:29:44.55ID:dKOZ273eそもそもsampの型がおかしい。遣り直し。
0391デフォルトの名無しさん
2014/08/13(水) 19:00:46.39ID:KGiYCuxo非常に丁寧にありがとうございました。とても参考になりました。
0392デフォルトの名無しさん
2014/08/13(水) 22:49:39.78ID:yUu6IlV+OS X で C で GUI はあんまりいいのないと思う。
C++ なら Qt あたりかなぁ。あとは wxWidgets とか。
どっちもマルチプラットフォームだから、Windows とかでも動かせる。
でも多分素直に Objective-C + Cocoa で作った方が Mac 色に染まれると思う。
0393デフォルトの名無しさん
2014/08/14(木) 00:42:33.74ID:KTikXAiCプラットフォーム=Win32でビルドしていたWin32コンソールアプリを
プラットフォーム=x64でビルドして実行したら、ある関数のint型の引数
の受け渡しで、全然違う値に化けてしまう症状が出ています。
具体的には、こんな感じです。
呼び出した 関数で受け取った
時点の値 時点での値
149 --> 1707222240
11 --> -442583168
原因が分からないのですが、どのあたりを疑うべきでしょうか?
0394デフォルトの名無しさん
2014/08/14(木) 00:51:32.99ID:wROGfWf+int
0395デフォルトの名無しさん
2014/08/14(木) 01:06:02.76ID:KTikXAiCコメントありがとうございます。
でも、32でも64でもintは4バイトで同じだと思うのですが。
0396デフォルトの名無しさん
2014/08/14(木) 01:42:03.02ID:BE82x3v5hoge.h #pragma once
hoge.cpp #include "hoge.h" <ncurses.h> <string> ncursesの関数使用とstring変数の宣言
をコンパイルしたところ
ncurses.hは問題ないのですがstringが未定義となります
何故でしょうか
0397デフォルトの名無しさん
2014/08/14(木) 09:26:04.99ID:xlLN/xxE引数にポインタが入っていない?
0398デフォルトの名無しさん
2014/08/14(木) 09:52:30.31ID:mYwSdCAJコンパイラが採用しているモデルによってintのサイズは異なる。
http://ja.wikipedia.org/wiki/64%E3%83%93%E3%83%83%E3%83%88#64.E3.83.93.E3.83.83.E3.83.88.E3.83.87.E3.83.BC.E3.82.BF.E3.83.A2.E3.83.87.E3.83.AB
C++標準 short:16bit int:16bit long:32bit long long:64bit (全て最低ビット数。これ以上でも良い)
..LLP64 short:16bit int:32bit long:32bit long long:64bit pointer:64bit 例:64bit VC++
.....LP64 short:16bit int:32bit long:64bit long long:64bit pointer:64bit 例:64bit GCC
...ILP64 short:16bit int:64bit long:64bit long long:64bit pointer:64bit 例:HAL
...ILP32 short:16bit int:32bit long:32bit long long:64bit pointer:32bit 例:32bit
.....16bit short:16bit int:16bit long:32bit long long:..---- pointer:16bit 例:16bit
ただ、VCはILP64ではないはずだしint以外のところでミスしてる気がするなぁ…
取り敢えずクリーンしてリビルド。
型の不一致とキャストおよびポインタの類(ハンドル含む)の周辺を再確認。
引数に入ってる構造体や別の引数でそういうのがあるならよく確認すること。
それと、現象を再現できる範囲で関係ない部分を消していって、最小限のコードを絞り込む。
この作業すれば貼るまでもなく自力で原因が判る気もするけど、分からなければそれを貼る。
0399デフォルトの名無しさん
2014/08/14(木) 12:11:21.48ID:BE82x3v5詳細載せましたよろしくお願いします
http://codepad.org/5ozwCQpB
0400デフォルトの名無しさん
2014/08/14(木) 12:17:16.25ID:BE82x3v5リモートとローカル間違えました
エラーログは同じで
環境は以下です
g++ (GCC) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
0401デフォルトの名無しさん
2014/08/14(木) 12:37:13.80ID:KTikXAiCアドバイスありがとうございました。
原因分かりました。私の勘違いでした。
VSのデバッガの、変数の値を見るウインドウの
使い方に慣れていないのが原因でした。申し訳ないです。
0402デフォルトの名無しさん
2014/08/14(木) 14:16:53.95ID:5fFoKeBHグローバル配列をexeと複数のDLL間で共有したいのですが
exeとDLL一対一だと__declspec(dllexport)を使ってできたんですが、
複数のDLLだとできませんでした。externも使ってみたんですがこれもできませんでした。
どうすればグローバル配列を共有できるんでしょうか。宜しくお願いします。
0403デフォルトの名無しさん
2014/08/14(木) 14:20:15.22ID:MeOL7pvQ0404デフォルトの名無しさん
2014/08/14(木) 14:21:20.45ID:7UqN+IkXここらへんで
*.cpp
#pragma data_seg("COMMONDATA")
*.def
SECTIONS
COMMONDATA READ WRITE SHARED
0405402
2014/08/14(木) 14:23:02.79ID:5fFoKeBH0407デフォルトの名無しさん
2014/08/15(金) 00:58:10.02ID:lVSvlh9k文字を16進数として扱いたいと考え、_stprintf_sに突っ込んでみました。
するとアルファベットや記号は想定通りに21〜7dとして表示されるのですが、
それ以外、たとえば'あ'(82a0になると想定)を入れると、ffffffa0と予想外の値が表示されました。
shift-jisは1バイトだったり2バイトだったりするのでこの方法ではダメなのでしょうか?
それ以前に%xにcharを突っ込むのが不適切でしょうか。
もしくは他に適切な方法があれば教えてください。
char ch = _T('あ');
char s[9];
_stprintf_s(s,_T("%x"),ch);
0408デフォルトの名無しさん
2014/08/15(金) 01:26:00.14ID:l1bBLjmZ文字コードの問題では?
_T()マクロは、_UNICODE(だっけな?)が定義されていると、wchar_tとして処理される。
wchar_tは確かUTF-16なので、charで受けるとおかしくなる。
charをTCHARにしてみたら?
ただ、ワイド文字を使うと英数字も2バイトになるけど
0409デフォルトの名無しさん
2014/08/15(金) 01:26:34.19ID:cLr8J/Qnchar ch = _T('あ');
の時点で理解不足
http://msdn.microsoft.com/ja-jp/library/c426s321.aspx
_TだのTEXTだののジェネリックは速いんじゃないの?
0410デフォルトの名無しさん
2014/08/15(金) 07:36:59.01ID:sObSMUrmchar ch[2] = 'あ';
char s[9];
sprintf_s(s, _countof(s), "%x%x", ch[0], ch[1]);
0411デフォルトの名無しさん
2014/08/15(金) 14:23:34.12ID:ADzFYem4mainframe.cppの中ではstd::stringとしておくか、using namespace std;等で、
std::stringをmainframe.cppの中の名前空間でも使えるようにしておく。
けど、名前が衝突したりするしusing namespace std;はおすすめしない。
0412デフォルトの名無しさん
2014/08/15(金) 14:28:27.37ID:ADzFYem4ShiftJISでは全角文字は2バイト(2文字)で構成されている。
これは文字列として扱って1バイトづつ読むとか、
wchar_tなどを使ってUnicode化して対処できる。
あと0x80以上の値だからsigned charだと負数になる。
printfの引数に突っ込むとintにキャストされたりするから、
「ffffff」などのような余計なfが出力されたりもする。
こっちはunsigned charで扱うか、キャストするときにunsignedにしたり&0xFFしたりとか。
0413デフォルトの名無しさん
2014/08/15(金) 17:10:22.07ID:sR5x+ET8あぁなるほど 名前空間の存在を失念してました ありがとうございます!
0414407
2014/08/15(金) 21:10:18.95ID:lVSvlh9kcharをTCHARにする方法、>>410や>>412で勧められた2バイト文字を文字列として扱う方法の両方でうまくいきました。
お察しの通りこれまで「おまじない」として_Tマクロを使っていたので、ちゃんと理解を進めるよう努力します。
0415デフォルトの名無しさん
2014/08/18(月) 07:20:53.47ID:cR2JPW/Aポインタ変数はようはjavaでの参照型変数みたいな認識でいいんですかね?
0416デフォルトの名無しさん
2014/08/18(月) 07:34:15.21ID:BFPWuSMs0417デフォルトの名無しさん
2014/08/18(月) 07:34:21.69ID:ArWtLEqw配列とかはポインタがメモリ上の何処を指してて自分が何処を操作したいのか意識できないと途中でハマるかも。
C++ならスマートポインタとかstd::vector他のコンテナとか使ったほうが楽できるが、リークは起こさないようにね。
0418デフォルトの名無しさん
2014/08/18(月) 07:35:37.07ID:9zqJA8S0c++の参照とc++のポインタは別だぞ。
0419デフォルトの名無しさん
2014/08/18(月) 07:47:36.13ID:2iJxkFC+CとC++とC#の3つの違いって何?
0420デフォルトの名無しさん
2014/08/18(月) 07:53:10.82ID:WADX0cbTバカっていうんだよ
0421デフォルトの名無しさん
2014/08/18(月) 08:23:03.11ID:DekYufYJC++の参照とは違い、nullを参照することを前提とした仕様になってる
んでリファレンスカウントなどを行うことを考えると
C++で言えばshared_ptrが一番近いんじゃないかと
0422デフォルトの名無しさん
2014/08/18(月) 08:35:38.75ID:DekYufYJC言語はOOPLでは無いので、class文などが無くOOPがしづらいが、その分他2者と比べて仕様が少なめ
低いレイヤー向けのプログラムによく使われる
C++はC言語のコードがほぼそのまま動くように作られた、Cとは別の言語
全部の仕様を把握するのは大変なので分かってる部分だけで組む人も多い
現在はC++環境の互換機能でC言語環境の代用とすることも多くなったが、一応別言語なので
それに慣れてると純粋なC言語の環境に触ったときつまづいたりする
C#は似たところもあるが、根本的に別の言語でC/C++のコードがそのまま動くなんてことはまず無いと思っていい
0423デフォルトの名無しさん
2014/08/18(月) 08:42:55.69ID:2iJxkFC+なるほど。俺は馬鹿だったのか
>>422
ありがとう
0424デフォルトの名無しさん
2014/08/18(月) 13:22:40.71ID:OdlWZdI30425デフォルトの名無しさん
2014/08/18(月) 19:08:57.93ID:0GH1txVb究極呪文「馬鹿には無理」は通用しない!!
0426デフォルトの名無しさん
2014/08/19(火) 00:25:54.48ID:Ihvi0tCPhttp://stackoverflow.com/questions/3177241/best-way-to-concatenate-two-vectors
に有る�@と�Aのどっちがよいのでしょうか?
�@
AB.reserve( A.size() + B.size() );
AB.insert( AB.end(), A.begin(), A.end() );
AB.insert( AB.end(), B.begin(), B.end() );
�A
std::vector<int> AB = A;
AB.insert(AB.end(), B.begin(), B.end());
0427デフォルトの名無しさん
2014/08/19(火) 01:32:19.20ID:DnbUByEk0428デフォルトの名無しさん
2014/08/19(火) 19:55:40.06ID:mxmpwOEU0429デフォルトの名無しさん
2014/08/19(火) 22:58:45.34ID:MNYlxzwLほんとCが好きだな
0430デフォルトの名無しさん
2014/08/20(水) 00:48:36.69ID:fMATK+WF関数を再帰呼び出ししたら
warning C4717: すべてのコントロールのパス、関数を回帰するとランタイム スタック オーバーフローが発生します。
って出るんですが、スタックを多めに取って実行すれば問題なく実行出来るのですが、
場合によっては、そのスタックでも足りない可能性はあります。
とは言っても再帰を使わない方式に書き換えるのは難しいのですが、こういう場合、
どういう対策が良いでしょうか?
0431デフォルトの名無しさん
2014/08/20(水) 02:08:22.86ID:7ZTzP0p/アルゴリズムを見直して、出来るだけ再起を減らす。ループに出来る所は、ループに直す
例えば、自分で自分を呼び出す関数は、予め確保したメモリに、計算結果を書きこんで、関数は抜けるようにする。
その関数を呼び出す所をループにして、計算結果を元に条件分岐して、渡す引数を変更するなどの処理をつけるとか。
あと計算する順番を工夫するとか。(再起で最後に計算するものがわかっていたら、それから計算するなど)
もしくは再起に強そうなschemeを使うとかw
0432デフォルトの名無しさん
2014/08/20(水) 07:44:24.11ID:hY37C+OW二分木を使っているなら平衡二分木に切り替えるとか
0433デフォルトの名無しさん
2014/08/20(水) 11:27:40.36ID:8EAQY78n再起の時に関数呼び出しでコールスタックを積み上げる代わりに、
再起の時に自前のスタックにローカル変数を積み上げればループに書き換えれる。
0434デフォルトの名無しさん
2014/08/20(水) 16:51:06.48ID:fMATK+WFみなさんアドバイス有難うございました。
>ループに出来る所は、ループに直す
この方式に変更できました。
意外と簡単に出来ました。助かりました。
>平衡二分木に切り替えるとか
普通の二分木しか知らないので勉強します。
0435デフォルトの名無しさん
2014/08/20(水) 17:12:14.82ID:rntLD2SQヘッダを正しくincludeすればヘッダファイルでプロトタイプ宣言する時STLコンテナ等includeする必要はありませんよね
色々ためしてヘッダを正しくとはincludeの順番も関係あると気づいたのですが
どうにもCE外れなくて 知識をください
0436デフォルトの名無しさん
2014/08/20(水) 17:16:19.85ID:m9TNP3muヘッダで使ってるならちゃんとincludeしてくれ
0437デフォルトの名無しさん
2014/08/20(水) 17:31:17.86ID:rntLD2SQ標準ライブラリなら衝突しないしそうするべきですかね
一発でCE解決するんですがどうにも納得いかなくて
0438デフォルトの名無しさん
2014/08/20(水) 17:57:28.58ID:YTuxoJAp的外れな事言ってたらスルーしてくれ
-----クラス.h
#include "Main.h"
#ifndef I_クラス_I
#define I_クラス_I
・・・
#endif /* I_クラス_I */
-----クラス.cpp
#include "クラス.h"
・・・
-----main.h
#ifndef I_MAIN_I
#define I_MAIN_I
#include <先に標準系>
・・・
#include "クラス.h"
#endif /* I_MAIN_I */
-----main.cpp
#include "main.h"
・・・
これじゃだめなん?
0439デフォルトの名無しさん
2014/08/20(水) 18:00:14.34ID:lf2AdZUe0440デフォルトの名無しさん
2014/08/20(水) 18:10:12.42ID:rntLD2SQ浸透してるものかと思い怠けました
0441デフォルトの名無しさん
2014/08/20(水) 18:21:45.98ID:rntLD2SQSTLコンテナを使うプロトタイプ宣言においてincludeをする必要がないと聞いたので疑問を感じました
--main.cpp
using namespace std;
int main(){
hoge hogehoge;
return 0;}
--hoge.h
#pragma once
class hoge{
public: void test(std::queue<int>);
};
--hoge.cpp
#include<queue>#include"hoge.h"
//ここの順序でエラーが出たり出なかったり
void hoge::test(std::queue<int> foo){}
0442デフォルトの名無しさん
2014/08/20(水) 18:29:36.36ID:xEVixHuY> STLコンテナを使うプロトタイプ宣言においてincludeをする必要がないと聞いたので疑問を感じました
それが間違い。
> #include<queue>#include"hoge.h"
> //ここの順序でエラーが出たり出なかったり
そもそも、#include <queue>はhoge.hで記述すべき。
そうじゃないと、hoge.hやfuga.hを使うユーザは、そのヘッダファイルが必要としている他のヘッダファイルをいちいち探して自分でインクルードしなければならなくなる。
そしてその上で、全体としてpragma onceやインクルードガードを駆使して、複数回インクルードしても大丈夫なようにすべき。
0443デフォルトの名無しさん
2014/08/20(水) 18:30:05.99ID:fMATK+WFI_MAIN_I
I_クラス_I
という書き方は、業界の標準的な記法なんですか?
0444デフォルトの名無しさん
2014/08/20(水) 18:30:42.19ID:lf2AdZUe0445デフォルトの名無しさん
2014/08/20(水) 18:39:08.76ID:fMATK+WF0446デフォルトの名無しさん
2014/08/20(水) 18:43:20.13ID:YTuxoJAp違うよごめんね
アンダーバー1つや2つで挟んだのは使用しない方がいいからIつけただけ
0447デフォルトの名無しさん
2014/08/20(水) 19:11:02.35ID:rntLD2SQどうもありがとうございました
0448デフォルトの名無しさん
2014/08/20(水) 19:46:10.64ID:RXWpuYSN0449デフォルトの名無しさん
2014/08/20(水) 22:33:57.06ID:fMATK+WFああ、そうですか。
私の場合、いい用語が思いつかなかったので、
#ifndef ClassAのヘッダはインクルードされた
みたいな変な名前にしているので、I_クラス_I が業界標準なら真似しようかなと
思ったのですが。
>>448
#ifndef INCLGRD_ClassA
こんな感じですか。この方式を私も使わせてもらおうかな。
0450デフォルトの名無しさん
2014/08/20(水) 23:43:01.23ID:g2oSYh4jmain.hなら
#ifndef _MAIN_H_
みたいな
0451デフォルトの名無しさん
2014/08/21(木) 00:04:31.22ID:cKYAbYCX0452デフォルトの名無しさん
2014/08/21(木) 00:07:38.16ID:yvxtVK3Iユーザ(この場合は、処理系のユーザ=一般のプログラマ)としては、あまり勧められん
0453デフォルトの名無しさん
2014/08/21(木) 00:12:41.20ID:8LHCWH/J非標準だけど、VSでもg++でもclangでも使える#pragma onceでいいんじゃない?
0454デフォルトの名無しさん
2014/08/21(木) 00:28:02.42ID:hIdRF2P5ああ、なるほど。
でも、ヘッダーの多重インクルードに何度も悩まされたので(今も)、
#ifndef
と
#pragma once
の両方を使っているのですが、それは無駄ですね。pragmaだけにするかな。
0455デフォルトの名無しさん
2014/08/21(木) 01:38:39.48ID:ftoiqPr5クラス、構造体、共用体のメンバーは、初期化できません。
とエラーが出るのですがplacement newを使う以外に回避方法はないんでしょうか
0456デフォルトの名無しさん
2014/08/21(木) 01:47:07.64ID:bEzT5YFtソースは?
0457デフォルトの名無しさん
2014/08/21(木) 02:15:49.74ID:hY3kzjbp0458デフォルトの名無しさん
2014/08/21(木) 06:10:15.31ID:ImdJ7Vgvふつうにコンストラクタで自前で好きな値にセットすればいいと思うんだけれども‥
そもそも配列の初期化(を = {0} とかでお手軽に記述するの)はプログラムの最初での初期化の場合にのみ、別の記述として意味があるのであって、
スタック上とかヒープ上の不定領域を初期化したいのなら、そのようにコードを書くのが、そしてそっちのほうがわかりやすいのでは?
>>457
C99 とかみていると、世の中おかしくない?とか思ってしまう
0459デフォルトの名無しさん
2014/08/21(木) 08:12:43.96ID:wIaa1KaJ#pragma onceだとインクルードガードみたいに範囲指定できなくね?
0460デフォルトの名無しさん
2014/08/21(木) 08:33:19.66ID:lr9MxyFk俺は >>453 じゃないけど範囲指定いらなくね?
まあ、個人的には環境を選ぶ pragma は好きになれないから、結局インクルードガードで全体を囲ってしまうんだが。
ところで、ヘッダファイルにインクルードガードもしくは pragma once って、もはや必須じゃね?
このスレのテンプレ化したいくらいだ。
0461デフォルトの名無しさん
2014/08/21(木) 08:41:01.70ID:hozPYr3C0462デフォルトの名無しさん
2014/08/21(木) 09:02:16.47ID:KDaiW8630463デフォルトの名無しさん
2014/08/21(木) 09:33:01.41ID:QQWyFLQR0464デフォルトの名無しさん
2014/08/21(木) 11:07:18.52ID:wLVq0/GLwhile (*line) {
/*処理*/
line++;
}
あるいは
while (line[i]) {
/*処理*/
i++;
}
文字列末尾に\0がある前提のプログラムだと思うんですが、もし末尾の\0が無い文字列(?)を意図的に与えたら、\0をどこかに発見するまで与えた文字列(?)のメモリ範囲を超えてどこまでも処理を続けてしまうのでしょうか?
0465デフォルトの名無しさん
2014/08/21(木) 11:08:20.98ID:hozPYr3C0466デフォルトの名無しさん
2014/08/21(木) 11:09:31.02ID:Rf32jxet0467デフォルトの名無しさん
2014/08/21(木) 11:15:24.56ID:wLVq0/GL0468デフォルトの名無しさん
2014/08/21(木) 11:17:44.17ID:baeu0mZSそうならないようにアクセス違反的なエラーを出すのがOSの役目
0469デフォルトの名無しさん
2014/08/21(木) 11:20:53.86ID:Rf32jxetどっちもいっしょ
>>468
両方書き込み専用にしておくってこと?
そんなことする前に一つの場所においてパス通すべきだとおもうんだが
0470デフォルトの名無しさん
2014/08/21(木) 11:21:19.13ID:Rf32jxet0471デフォルトの名無しさん
2014/08/21(木) 12:15:13.79ID:wIaa1KaJ>>468は>>467あてじゃね?
0472ID:baeu0mZS
2014/08/21(木) 13:47:44.14ID:baeu0mZS俺の書き込みは、ID:hozPYr3C氏の11:08:20.98へレス番指定したんだが‥
Jane Style 3.75を使ってるけど、ブラウザで見たらレス番号がずれる現象が発生してるわ
大方、ファイルでも壊れたんじゃろうとて、一度消してリロードしてみる
0473デフォルトの名無しさん
2014/08/21(木) 14:03:06.58ID:wIaa1KaJ0474デフォルトの名無しさん
2014/08/21(木) 14:58:36.33ID:baeu0mZSthx 憶えておくわ
0475デフォルトの名無しさん
2014/08/21(木) 17:41:56.75ID:QQWyFLQRYes。ただし、どこかでメモリアクセス違反などすれば止まる事もある。
コンパイラ等がアクセス違反検出用の処理を追加した場合も止まる。
>>469
NUL文字終端が無い固定長配列って可能性の話かもしれん。
>>472-473
どのレスが消えたのか分からないけど、未だに独断透明削除が続いてんのかよこの板・・・
0476デフォルトの名無しさん
2014/08/22(金) 00:33:59.73ID:l//fiCSE一部クラスの使い方がわからないので教えていただけると幸いです。
//コンストラクタ
Ex)Move::Move(int shape_id) : X(x),Y(y){}
というプログラムがあったとして、
Move::Move(int shape_id)の後のX(x),Y(y)は
何をしているのでしょうか?参考書に書いてあったのですが、
説明がなくて頓挫しております・・・
0477デフォルトの名無しさん
2014/08/22(金) 00:45:37.33ID:8lh3zAq8初期化しているだけ
初期化子リストでググると幸せになれるかも
0478デフォルトの名無しさん
2014/08/22(金) 01:10:55.70ID:bnST7d3s>
> というプログラムがあったとして、
ないでしょ。
0479デフォルトの名無しさん
2014/08/23(土) 20:22:17.27ID:+lV5UoHotime_tってただの__int64みたいだし、単に引き算してintにキャストしてもおk?
0480デフォルトの名無しさん
2014/08/23(土) 21:59:53.82ID:++Jtu7HWパフォーマンスを要求されるなら、64ビット整数の引き算の結果をintにキャストすればいい。
そうでないなら、difftime()の戻り値をintにキャストすればいい。
0481デフォルトの名無しさん
2014/08/23(土) 22:48:22.43ID:+VQeeysP> time_tってただの__int64みたいだし、単に引き算してintにキャストしてもおk?
標準Cの規格の範囲ではだめ
標準Cではtime_t型の値の精度は実装依存
つまりtime_t型の値1は1秒を意味するかもしれないし、1ミリ秒かもしれないし、10秒とかでも規格違反ではない
といっても実際のところPOSIXでもwindowsでもtime_tは1秒単位なんでその範囲でのプログラムならokといえる
0482デフォルトの名無しさん
2014/08/24(日) 09:26:54.81ID:PkG6bn0Z0483デフォルトの名無しさん
2014/08/24(日) 13:24:36.26ID:EYMdVqe7片対数グラフで直線だから既に指数関数的増加だった
2014年に、西アフリカでアウトブレイクした潜伏期間延長型エボラの死者は、2014年8月半ばで1000人。←今ココ
2014年12月上旬で1万人。
この時点で世界規模で空路シャットダウン開始、世界経済大混乱
2015年5月で10万人。
2015年9月で100万人。
この時点で、第二次世界大恐慌発生
2015年大晦日で1000万人。
ちなみに
http://ja.wikipedia.org/wiki/2014%E5%B9%B4%E3%81%AE%E8%A5%BF%E3%82%A2%E3%83%95%E3%83%AA%E3%82%AB%E3%82%A8%E3%83%9C%E3%83%A9%E5%A4%A7%E6%B5%81%E8%A1%8C
:カナダ保健省のサイトでは体内に数個のエボラウィルスエアロゾルが侵入しただけでも発症するとしている
:ハマダラカが、吸血したての人の新鮮血を媒介しているという学説が浮上している
エボラ出血熱は蚊やアブに刺されただけで感染する。
:「この地域には内戦、政府による搾取、テロが長い間続いており、それによって生まれた恐怖、貧困、猜疑心などがある。エボラは耐え難い騒音に付け加えられた一つのざわめきに過ぎない」
現地では
や る 気 は 皆 無
0484デフォルトの名無しさん
2014/08/24(日) 13:25:55.04ID:zZu98MZL参考URL
http://okwave.jp/qa/q5584845.html
> time_tってただの__int64みたいだし、単に引き算してintにキャストしてもおk?
用意されているライブラリ関数を使わず、プログラマ自身が自分でコーディングするという
リスク・テイキングに見合うメリットが得られるのかな
0485484
2014/08/24(日) 13:51:28.91ID:zZu98MZL; 用意されているライブラリ関数を使わず、プログラマ自身が自分でコーディングするという
; リスク・テイキングに見合うメリットが得られるのかな
0486デフォルトの名無しさん
2014/08/24(日) 18:51:21.87ID:h7b5TqwTありがとうございました、理解しました
0487デフォルトの名無しさん
2014/08/28(木) 17:09:19.37ID:qW74C0E4かなり初心者のためよくわかりませんが、ポインタのアクセスによるメモリ関係のような気もするのですが、、
どのように対応すればいいのでしょうか?対応方法がわからず、困っています。。
void layer::settingA()
{
//正常に動作する
const charaData* param = static_cast<const charaData*>(chara->getUserData());
int a = param->charaHp
}
void layer::settingB()
{
//落ちる
const charaData* param = static_cast<const charaData*>(chara->getUserData());
int a = param->charaHp
}
0488デフォルトの名無しさん
2014/08/28(木) 17:11:16.45ID:wVJDe5T10489デフォルトの名無しさん
2014/08/29(金) 07:16:07.73ID:5ncU7wKDchar aaa[5]="";
char bbb[5]={0};
0490デフォルトの名無しさん
2014/08/29(金) 07:26:13.24ID:rM6G6SCh0491デフォルトの名無しさん
2014/08/29(金) 08:04:00.30ID:xp2wSl6Nすみません、質問の仕方が悪かったです
どうちがうのでしょうか?
前者はすべての要素に\0は入らない、保証されないということでしょうか?
0492デフォルトの名無しさん
2014/08/29(金) 08:07:07.38ID:rM6G6SCh0493デフォルトの名無しさん
2014/08/29(金) 09:21:41.66ID:ed/IJtRD0494デフォルトの名無しさん
2014/08/29(金) 11:07:47.50ID:TaMHNcEKところで新発見があったけど
char aaa[3] = "abc";
がアリな事に驚いたよ
char aaa[3]; // == {?,?,?};
char aaa[3] = ""; // == {'\0','\0','\0'};
char aaa[3] = "a"; // == {'a','\0','\0'};
char aaa[3] = "ab"; // == {'a','b','\0'};
char aaa[3] = "abc"; // == {'a','b','c'};
// char aaa[3] = "abcd"; // error
なところを見ると
必要があればzerofill->memcpyしてるようにしか思えないから
等価なんじゃね?
そもそもchar配列内の'\0'以降はオマケだから気にする必要がないけど。
0495デフォルトの名無しさん
2014/08/29(金) 12:50:49.16ID:bxnhpnUI>>493
本当?
初期化リストで配列を初期化する時の、部分指定のルールから考えると、未指定部分はゼロ初期化される方が自然な気がする。
もちろん規格は未確認だが。
0496デフォルトの名無しさん
2014/08/29(金) 12:55:35.34ID:nIzdonyc0497デフォルトの名無しさん
2014/08/29(金) 13:41:19.97ID:P5dHkx7D6.7.8
If there are fewer initializers in a brace-enclosed list than there are elements or members of an aggregate,
or fewer characters in a string literal used to initialize an array of known size than there are elements in the array,
the remainder of the aggregate shall be initialized implicitly the same as objects that have static storage duration.
0498487
2014/08/29(金) 18:05:43.82ID:5WqPiw0sありがとうございます。
問題はそこじゃないという指摘のため、間のソースを全部削ったんですが症状は変わらず、ハマっています。。
構造体自体にはアクセスできているんで、そこではないでしょうし。。
メモリやポインタは関係ないということですか?
0499デフォルトの名無しさん
2014/08/30(土) 01:50:13.00ID:X4lcw1ATsettingAとsettingBが同じ内容なんだけど…。
2度目にアクセスした時
・charaは有効なのか?
・chara->getUserData();で得たparamは有効なのか?
0500デフォルトの名無しさん
2014/08/30(土) 04:32:00.31ID:3Iv0NAQx全部削ったならmain無いから動くわけねぇだろ
貼ってないところに問題が有るんじゃねって話かと
0501デフォルトの名無しさん
2014/08/30(土) 12:03:50.32ID:ZWIpt6n50502デフォルトの名無しさん
2014/08/30(土) 15:56:39.08ID:Bqq2YL4t範囲for≧for>>イテレータって感じになるんですけど、イテレータは鈍足って事でいいんですか?
コンパイラはgcc49で最適化オプションは-O2のみです
0503デフォルトの名無しさん
2014/08/30(土) 16:09:58.71ID:FDr4RXqe速度的にはポインタ操作同等になるかもしれないし測ってみないとわからん。
0504デフォルトの名無しさん
2014/08/30(土) 18:20:24.36ID:Bqq2YL4tなるほど
速度を重視するなら動かしてみて確認する他なさそうですね
ありがとうございます
0505デフォルトの名無しさん
2014/08/30(土) 21:46:42.81ID:Ec2+uw3j0506487
2014/08/31(日) 03:12:32.73ID:O5SWMn7cmainは削っていません。。
問題はたしかにそこじゃなかったです。。
>>499
同じコードでアクセスしていました。
おかげさまでヒントになり、解決しました。
2つ目がsetUserDataの値がうまくsetされておらず。。
getしたら落ちたというオチみたいでした。。
ありがとうございました。
0507デフォルトの名無しさん
2014/09/09(火) 12:50:40.41ID:fY2rmFRQこのページの最初のコードをg++でコンパイルするとsymbols not foundになるのですが,追加が必要なライブラリディレクトリやインクルードディレクトリはあるのでしょうか?
一応-Lでboostのlibディレクトリを追加しています.
0508デフォルトの名無しさん
2014/09/09(火) 13:52:35.93ID:LhYKCGJXエラーメッセージを丸ごと貼ってみてくれ。
0509デフォルトの名無しさん
2014/09/09(火) 14:17:05.62ID:fY2rmFRQありがとうございます。
2パターン貼ってみます
パターン1
----
g++ source.cpp
Undefined symbols for architecture x86_64:
"boost::system::system_category()", referenced from:
__static_initialization_and_destruction_0(int, int) in cc6cpb0x.o
boost::system::error_code::error_code() in cc6cpb0x.o
boost::asio::error::get_system_category() in cc6cpb0x.o
"boost::system::generic_category()", referenced from:
__static_initialization_and_destruction_0(int, int) in cc6cpb0x.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
パターン2
----
g++ source.cpp -L/usr/local/Cellar/boost/1.55.0_2/lib/
Undefined symbols for architecture x86_64:
"boost::system::system_category()", referenced from:
__static_initialization_and_destruction_0(int, int) in ccucepDw.o
boost::system::error_code::error_code() in ccucepDw.o
boost::asio::error::get_system_category() in ccucepDw.o
"boost::system::generic_category()", referenced from:
__static_initialization_and_destruction_0(int, int) in ccucepDw.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
----
0510デフォルトの名無しさん
2014/09/10(水) 19:34:03.03ID:8YG7t37E作成されたオブジェクトを参照で受け取っても事故が起こらないと保障されていますか?
const std::string & get() {
return std::string("ABC");
}
void main() {
const std::string &s = get();
printf("%s", s.c_str()); // ←どうなる?
}
0511デフォルトの名無しさん
2014/09/10(水) 19:35:59.76ID:8YG7t37Econst std::string get() {
return std::string("ABC");
}
void main() {
const std::string &s = get();
printf("%s", s.c_str()); // ←どうなる?
}
0512デフォルトの名無しさん
2014/09/10(水) 20:20:13.24ID:oypds7bC確か大丈夫だったはず
0513デフォルトの名無しさん
2014/09/10(水) 20:37:32.22ID:AEk8bFgU一時オブジェクトを参照で受け取ったら一時オブジェクトの生存期間は参照の生存期間と同じになります。
0514デフォルトの名無しさん
2014/09/11(木) 23:18:49.66ID:NV7aTG5jtypedef struct _str{
unsigned char *a1;
unsigned char *a2;
unsigned char **a3;
}str;
この構造体のa3には要素数不明のデータを収めるための可変配列を扱いたく
関数内でreallocして拡張しようと思っているのですが
どうもうまく行きません。
上記構造体の型を利用してa3を可変配列として扱うにはどのように記述すればよいかサンプル作っていただけませんか?
0515デフォルトの名無しさん
2014/09/12(金) 00:10:39.54ID:ZJPIaP/+うまく行かないサンプルうpしてみろ
問題点を指摘してやる
0516デフォルトの名無しさん
2014/09/12(金) 00:11:45.57ID:qRf/kDN5unsigned char * a3;
...
void * tmp = realloc(strvar.a3, newsize);
if (!tmp) strvar.a3 = (unsigned char *)tmp;
0517デフォルトの名無しさん
2014/09/12(金) 00:12:56.60ID:qRf/kDN50518デフォルトの名無しさん
2014/09/12(金) 12:55:55.73ID:+9CMXkcEありがとうございます
a3は可変配列にしたいのでダブルポインタを使いました
普通のポインタで使うとreallocしたあとの可変配列参照はa3[n]でいけますか?
0519デフォルトの名無しさん
2014/09/12(金) 13:44:49.23ID:AGOnRFEDこういう事がしたいん?
C++ならvector使うに限るけどな
Cならポインタの配列をreallocすればいい
0520デフォルトの名無しさん
2014/09/12(金) 13:45:08.52ID:AGOnRFEDhttp://ideone.com/yeMzyV
0521デフォルトの名無しさん
2014/09/12(金) 19:47:46.99ID:em+uIfWXこのサンプルソースってc++ですか?
newってcで使えるんですか?
素人ですみません
0522デフォルトの名無しさん
2014/09/12(金) 21:41:43.02ID:pvIGOvd5お前のいっている可変配列ってどういうものだよ?
(mallocで確保した領域は配列的に使えるけど配列ではない、ってところは置いとくとしても)
char**なら可変配列だけどchar*なら可変配列ではないっていうものがお前のいう可変配列なら他人には通じない定義だぞ
0523デフォルトの名無しさん
2014/09/12(金) 22:19:14.01ID:DhkuCj0aどこでそんな言葉覚えて来るんだろうな
0524デフォルトの名無しさん
2014/09/13(土) 01:31:31.63ID:bfbBE48o入門書や入門サイト。リトマス紙になるね。
0525デフォルトの名無しさん
2014/09/13(土) 03:42:25.04ID:3jc89SS7ポインタのポインタ?
0526デフォルトの名無しさん
2014/09/13(土) 03:43:16.80ID:XWWKFUhS0527デフォルトの名無しさん
2014/09/13(土) 08:12:26.61ID:71yOysF20528デフォルトの名無しさん
2014/09/13(土) 08:51:51.73ID:zuv4PMvj0529デフォルトの名無しさん
2014/09/13(土) 09:17:36.52ID:KASpJfW1ポインタへのポインタ
規格の文面でのポインタの表現は pointer to xxx が基本なので直訳なら xxxへのポインタ が普通
0530デフォルトの名無しさん
2014/09/13(土) 09:48:50.06ID:SFutnRUx二重ポインタとか多重ポインタと呼ぶ時もあるかなぁ…
0531デフォルトの名無しさん
2014/09/13(土) 09:53:56.51ID:cLSZnlBg多重ポインタはさらに酷い
0532デフォルトの名無しさん
2014/09/13(土) 10:21:44.32ID:GGHDqJ+40533デフォルトの名無しさん
2014/09/13(土) 10:48:30.10ID:33zq3RATだけど、ちょっと揚げ足取りみたいになってきたな
0534デフォルトの名無しさん
2014/09/13(土) 11:05:28.56ID:KASpJfW1pointer to pointer の意味ではなく pointer to double、double(型)へのポインタ
の意味にとられることがあって紛らわしいので使わないようにしろと言う話もある
0535デフォルトの名無しさん
2014/09/13(土) 11:45:37.70ID:7Nr6UObNhttp://ideone.com/dZN6kw
memcpy_sはMinGW4.9.1ならあるんだけどな
memcpyにすれば動くはず
0536デフォルトの名無しさん
2014/09/13(土) 11:46:34.75ID:7Nr6UObNmemcpyが単なるレジスタのmovになってる
64bitは幅が広いから何でも簡単にできちゃうんだな
0537デフォルトの名無しさん
2014/09/13(土) 14:45:34.57ID:SFutnRUxつか、http://ideone.com/yZmqYD こういう話じゃねぇの?
構造体を値渡しするならポインタへのポインタでないと困る。
失敗例→http://ideone.com/9TPH24
>>536
下手すりゃprintf呼び出し以外消えてたかもね。
0538デフォルトの名無しさん
2014/09/13(土) 22:32:48.07ID:wiUC0aE7>>514は
int read_string(char ** ppbuf) // 関数内で必要なサイズのバッファが確保される
みたいな関数を似たような関数を参考に自作しようとしたけど引数がポインタへのポインタである意味を理解できてなくて
char**型の変数をそのまま実引数として渡すとかいろいろ失敗しているんだろう
0539デフォルトの名無しさん
2014/09/13(土) 23:56:21.95ID:TL8s1y53クラスを既存型に代入する際の代入演算子を定義したいのです。
どうすればよいのでしょうか。
int a ;
MyClass b ;
a = b ;
とする際の代入演算子を定義する方法です。
0540デフォルトの名無しさん
2014/09/14(日) 00:08:48.95ID:N78ccrO00541デフォルトの名無しさん
2014/09/14(日) 00:14:22.61ID:mkcFGBUSoperator int() なりを定義する
ただし、暗黙変換になるので、止めた方がいいと思う
0542デフォルトの名無しさん
2014/09/14(日) 00:28:31.12ID:pYL8ChvE悩むよりもC++使った方が楽な場合が多いな
0543539
2014/09/14(日) 09:49:32.98ID:tidiM7B+やっぱ、やめたほうがいいんですかね。
キャスト演算子定義は、試しましたが、
既に書いたコードのいろんなところで、
オーバーロード関数があいまいだというエラーが出てしまいました。
なので、代入演算子自体を定義したかったのですが。
0544デフォルトの名無しさん
2014/09/14(日) 12:34:26.03ID:SUA5E3Us使いこなせてないだけなんじゃ
0545デフォルトの名無しさん
2014/09/14(日) 12:47:36.87ID:THGvpi5T終了させたいのですが、IEが終了したりしなかったりします。
Process Explorerを起動してみると iexplore.exe が
ツリー形式になっているのが原因かなと思っています。
iexplore.exe
└iexplore.exe
下の iexplore.exe のプロセスIDが指定された場合のみ、
上の iexplore.exe のプロセスIDを取得する方法を
教えていただけないでしょうか。
0546デフォルトの名無しさん
2014/09/14(日) 13:22:44.93ID:3ZBHn29xchar **buff;
などを扱えない人がプロジェクトにいてバグの心配があるのなら、
typedef char * BUFF;
typedef BUFF * BUFF_ARRAY;
としてBUFF, BUFF_ARRAYを使うようにすれば良い
ようなことを思いついた。
0547デフォルトの名無しさん
2014/09/14(日) 17:02:06.25ID:1D8XKbcvそういうのは却ってわかりにくくなるだけ
思い付いた本人だけはいいアイデアだと思うけど
0548デフォルトの名無しさん
2014/09/14(日) 18:23:09.41ID:GiyK3regましてや、それを掲示板で皆に読ませようとレスしたのか。
そのことが釣りでなければ本当に恐ろしい。
生粋の糞コード量産マシンでもないと書けないレスだ。
0549デフォルトの名無しさん
2014/09/14(日) 18:28:32.79ID:s+BV7Cb90550デフォルトの名無しさん
2014/09/14(日) 19:07:50.80ID:P8BkuFbgWin32APIがそんな感じだね
generic向けのTはありだけど
Pのtypedefはいらねー
0551デフォルトの名無しさん
2014/09/15(月) 00:14:23.35ID:A5qiBZ0Xそうだ、Win32APIの作法に慣らされただけだな俺は。
しかも自分で思いついたと勘違いするとか、もう、これは、糞製造機だなw
0552546
2014/09/15(月) 00:14:56.04ID:A5qiBZ0X0553デフォルトの名無しさん
2014/09/15(月) 00:19:58.20ID:NURXBSExああ構造体を値渡ししてんのか
いつも構造体をポインタ渡ししてるからそういうシチュエーションに出会った事がなかった
0554デフォルトの名無しさん
2014/09/15(月) 10:27:15.23ID:PW8m4k3j0555デフォルトの名無しさん
2014/09/15(月) 10:39:22.00ID:8dgxuMjV0556デフォルトの名無しさん
2014/09/22(月) 20:52:34.82ID:XE8gOusZただの予想なのですが、この言語ほかの言語に比べて複雑過ぎませんか?労力に見合ったパフォーマンスを得られるのでしょうか?
もちろん労力に合わなくても言語習得くらいやりますが
0557デフォルトの名無しさん
2014/09/22(月) 20:57:25.69ID:UZeuYMImJavaとかC#のほうが物量はある。
Rubyも公式外のライブラリを含めたら物量はある。
最近のC++の拡張は別にして、スタンダーテンプレートライブラリというのを実装するための仕組みを最低限取り入れたのがCからC++への変化。
0558デフォルトの名無しさん
2014/09/22(月) 21:05:07.96ID:UZeuYMImスタンダードテンプレートライブラリが扱えれば、内部の部品まで詳しく知る必要はないかもしれない。
Standard Template Library - Wikipedia
STLのアーキテクチャの多くはアレクサンドル・ステパノフという一人の人物の手によって作られた。
1979年に彼はジェネリックプログラミングの初期アイデアを練り始め、そしてソフトウェア開発に革命をもたらす可能性を探究し始めた。
ステパノフはジェネリックプログラミングの大きな可能性に気づき、ゼネラル・エレクトリックのR&D部門の仲間たちに対し、
ジェネリックプログラミングがソフトウェア開発の広範囲に渡る基礎として研究されるべきだということを説得した。
当時はジェネリックプログラミングを実際にサポートしているプログラミング言語がまだなかった。
それをサポートする最初のメジャーな言語はジェネリックユニット(汎用体)の機能があるAdaであった。
1987年までにステパノフとマッサーはジェネリックプログラミングの研究成果としてAdaのリスト処理ライブラリを開発してリリースしていた。
しかしながらAdaは軍需産業以外ではあまり普及しておらず、C++は当時まだ言語として未成熟ではあった(テンプレートはまだなく後から実装された)。
ステパノフはC言語で(後にC++で)数多くのアーキテクチャとアルゴリズムの実装法を検証した。
ベル研究所のアンドリュー・コーニグ(Andrew Koenig)がこの動きを察知して、1993年11月のANSI/ISOのC++標準化委員会にアイデアを提出するように求めるようなことがもしなければ、
この作業は間違いなく、研究プロジェクトとして、あるいはHPのプロプライエタリなライブラリとして継続されたであろう。
提案は委員会で全面的に賛同を得て、すぐさま1994年3月のミーティングでのコーニグからの正式なリクエストへとつながった。
0559デフォルトの名無しさん
2014/09/23(火) 02:04:53.44ID:y6lNWyJt公式外のライブラリとかライブラリの物量基準にしてどうすんだっていうか、
C/C++で作られたライブラリが幾つあると思ってるんだよ…
>>556
コードの実行性能的な意味のパフォーマンスにあまり貢献しない機能もままあるね。
自分で設計して書くだけなら知らなくてもどうとでもなるって機能は多いというか、
CになくてC++にある機能はほぼすべてがそういう機能と言えなくもない。
ただ、多くの機能は無いと困るとかあると便利だとか、理由があって存在している。
コードの実行性能的な意味のパフォーマンスはC由来の部分でわりと完結しているが、
「あったほうが便利だから」等の機能にどんな価値を見出すかは君次第だろう。
0560デフォルトの名無しさん
2014/09/23(火) 03:38:41.23ID:dVlUahkvJavaやC#と比べ、C++の物量は少ない。
0561デフォルトの名無しさん
2014/09/23(火) 04:59:39.32ID:RW747lS9メモリ管理はC/C++ の方が複雑だが、C を知っておれば C++ もその延長戦上で、大きく悩まない、ときどき止まることはあったにしても。
C++ の STL を俯瞰できるようになったら、一山超えただろうか、この場合テンプレートの細部まで知る必要はなく、パターンで認識して使っている、というのでかまわない。
物量として少ないのは事実であるが、学習困難性は‥問者はCを知っているので学習困難性も低いだろう‥ >>560 はわりとあたっているな
0562556
2014/09/23(火) 05:31:47.36ID:x8kHQGOEc++が基礎的というのはなかなかしっくり来る表現ですね
これでも物量はJavaやC#より少ないんですか・・・びっくりしました
テンプレートについて全部しる必要がない、と言うのは希望が持てそうです。ありがとうございました
ネストされたテンプレートを見て細かい仕様に思いを馳せてウッってなっていたところだったので・・・あちらこちらの命名がしっくりこないのは仕方なしで目をつぶりましょう. 覚えてしまえば関係なし!
0563デフォルトの名無しさん
2014/09/23(火) 11:09:21.73ID:RZgQ8Ezi学習困難性は高い
ライブラリの物量なんて使う部分しか覚えなくて平気だろ
嘘つきどもめ
0564デフォルトの名無しさん
2014/09/23(火) 15:14:32.71ID:Y91BvWUL0565デフォルトの名無しさん
2014/09/23(火) 15:53:24.78ID:+21wRmlfC++の言語仕様は、JavaやC#より膨大だよ。
後者は、言語仕様がすっきりしていたのが人気が出た理由の一つだから。
0566デフォルトの名無しさん
2014/09/23(火) 16:12:29.55ID:+21wRmlfC++の物量は JavaやC#の3倍くらい多いよ。
0567デフォルトの名無しさん
2014/09/23(火) 16:27:09.71ID:+21wRmlfnew(*p)CPerson() 的なコンストラクタ、new演算子の多重定義、
多重継承時の仮想基底クラス、右辺値参照、move、可変長引数の
仕様の複雑さ、#include <xxxx.h>から#include <xxxx> への変更、
static修飾の意味の不安定さ(translation localの意味とスタック変数でない、
という意味の二重性)、namespace, using, alias, typedef など似た物が
沢山あること、C/C++言語使用とは異質なものとしてプリプロセス処理があること
などなどとても複雑で実際は、3倍では済まない。
C++11,14まで正確に理解するための学習時間は、Javaなどの20倍くらいは必要。
ただし、JavaはJavaでGenericsなどで仕様拡張が行われているのでこの倍数の
数値は変わりうる。
0568デフォルトの名無しさん
2014/09/23(火) 16:42:59.75ID:+21wRmlf違いが分かりにくいという問題がある。
CPerson person1 = CPerson(xxx);
CPerson person2;
CPerson person3();
↑はどれもコンストラクタが呼び出され、代入演算子は一度も呼び出されない。
CPerson person4;
person4 = CPerson(xxx);
↑見た目は似ているが、こちらはコンストラクタが呼び出された後、代入演算子が呼び出される。
また、引数なしのコンストラクタを「デフォルト・コンストラクタ」と呼ぶが、
それを自分で定義しない場合は、「デフォルト・デフォルト・コンストラクタ」が自動生成される。
こういった用語の理解が必要なのも、仕様の膨大さを感じさせる原因となっている。
0569デフォルトの名無しさん
2014/09/23(火) 17:40:35.81ID:ZstUR7eg> もちろん労力に合わなくても言語習得くらいやりますが
なら、グダグタ言わずに習得してから文句垂れろよ
0570デフォルトの名無しさん
2014/09/23(火) 17:41:25.84ID:M/bHE28r0571デフォルトの名無しさん
2014/09/23(火) 17:45:27.22ID:+21wRmlfGoogleで、言語を英語にして、「defaulted default constructor」で
検索してみるべし。
0572デフォルトの名無しさん
2014/09/23(火) 17:50:40.14ID:rMNwwcojなんのことかと思ったら、ポインタのことでした。
0573デフォルトの名無しさん
2014/09/23(火) 17:53:16.65ID:M/bHE28r0574デフォルトの名無しさん
2014/09/23(火) 17:56:26.11ID:ot8dc/K+「デフォルト・デフォルト・コンストラクタ」の日本語訳で書かれた
本を見たことがある。
0575デフォルトの名無しさん
2014/09/23(火) 18:10:55.26ID:ot8dc/K+やっぱり、この辺の人は性格悪いな。
0576デフォルトの名無しさん
2014/09/23(火) 18:41:17.04ID:ZstUR7egそりゃその本の著者/翻訳者がバカなだけでしょ
0577デフォルトの名無しさん
2014/09/23(火) 18:44:49.10ID:ot8dc/K+C++ for Dummies「C++のからくり」SOFTBANK
スティーブン・R・デイビス著
瀬谷啓介訳
0578デフォルトの名無しさん
2014/09/24(水) 10:28:43.04ID:3Cm2Nqviキャスト、4つと言わずもうちょい分けても良かったのにと思う。
特にstatic_castとreinterpret_castのそれぞれの範囲が分かりづらい。
0579デフォルトの名無しさん
2014/09/24(水) 10:36:13.63ID:cwxDUbr21. 整数<--->浮動小数
2. 整数のビット数が狭くなる方向への変換
3. 浮動小数点の精度や指数が狭くなる方向への変換
4. 整数の符号の有り無しの変換
が全部合わさっている。
reinterpret_cast は、内部表現のビット列をそのまま維持して、解釈(意味)
だけを変える。その意味では、上記2,4とは同じと言えるかもしれない。
やってみた事がないが、reinterpret_cast でも、2,4 は可能かもしれない。
つまり、static_cast と reinterpret_cast は共通部分を持っているのかも。
0580デフォルトの名無しさん
2014/09/24(水) 12:41:39.16ID:YNAXKA8kperson3 の形式は存在しないでしょ。
0581デフォルトの名無しさん
2014/09/24(水) 13:47:08.95ID:oTUae3YUCPerson person5(xxx);
の形式は存在する。この形式で、引数のxxxが存在しない場合がperson3だ。
0582デフォルトの名無しさん
2014/09/24(水) 18:20:37.32ID:ZWvFC4Uz試してないでしょ?
0583デフォルトの名無しさん
2014/09/24(水) 22:39:04.34ID:Gby0THyICPerson person6=CPerson();
CPerson *person7=new CPerson();
なら問題なく許されるけど、
CPerson person3();
だとwarning C4930: 'CPerson person3(void)': プロトタイプされている関数が呼び出されませんでした(変数の定義が意図されていますか?)
とか(Visual Studio 2010)の場合は警告が出るな。コンパイルは通る。
http://ideone.com/319tnv ideoneのC++ 4.8.1の場合警告なしで通る。
http://ideone.com/kOXiUR ideoneのC++11の場合も警告なしで通る。
>>582
お前もな。
というか試した場合だと、独自拡張で受け入れられてしまう場合もある。
正しいかどうかを論じるなら規格文書を引いてこい。面倒なので俺はやらんがな!
0584デフォルトの名無しさん
2014/09/25(木) 05:19:22.31ID:Y/FZoDJC0585デフォルトの名無しさん
2014/09/25(木) 07:39:45.04ID:C75VVLj1もう何て言うか。。。
偉そうな事言うなら間違いは素直に認めないと。。。
0587デフォルトの名無しさん
2014/09/25(木) 10:15:54.79ID:gq4fP5oxCPerson person5("xxx"); // CPerson クラスの person オブジェクトを生成
CPerson person3(); // CPerson オブジェクトを返す関数を宣言
のようだ:
The syntax T object(); does not initialize an object;
it declares a function that takes no arguments and returns T.
The way to value-initialize a named variable before C++11 was T object = T();,
which value-initializes a temporary and then copy-initializes the object:
0588デフォルトの名無しさん
2014/09/25(木) 10:21:56.07ID:gq4fP5ox: most compilers optimize out the copy in this case.
が抜けていた。ここは大事。
>which value-initializes a temporary and then copy-initializes the object:
は、テンポラリオブエジュクトを作ってから、それをコピーコンストラクタでコピーする
という意味だが、実際のコンパイラはそんなことはせずに一気にデフォルト・コンストラクタを
呼び出す事が多い。それが、「: most」以下の部分が指摘していることだと思われる。
0589デフォルトの名無しさん
2014/09/25(木) 10:25:13.40ID:gq4fP5ox一応言っておくと、あなたは言葉が少なすぎるからそうなるんだよ。
知っているなら言葉で説明すべきなのに、人を馬鹿にしたような言葉だけを
書いて、内容は全く書いてない。
日本語が不自由な人が外国からアクセスしているのかも知れんが。
0590デフォルトの名無しさん
2014/09/25(木) 10:36:24.13ID:gq4fP5ox>偉そうな事言うなら
そもそも、どこに偉そうなことを書いたのか、具体的に書いてくれ:
(かなり腹立つから。)
0591デフォルトの名無しさん
2014/09/25(木) 11:05:48.34ID:FkhkjqOZ> C++には昔から正しく理解するのが難しい事柄として、コンストラクタと代入演算子の
> 違いが分かりにくいという問題がある。
Cだって
int a[] = {1,2,3,4};
の=は代入演算子じゃない。
C++の問題じゃない。おまえが無知なだけ。
0592デフォルトの名無しさん
2014/09/25(木) 12:54:24.76ID:gq4fP5oxC++処理系を自分で作ろうとした時などに、代入演算子とどちらが呼び出されるか
明確にしたい時があるんだよ。
使うに徹すればどちらでも同じ結果になるので大した問題にならない。
0593デフォルトの名無しさん
2014/09/25(木) 13:44:45.53ID:p4SXJv8d> Cだって
> int a[] = {1,2,3,4};
> の=は代入演算子じゃない。
無知なので尋ねますが、この場合(配列の初期化に限定?)の「=」は何演算子と呼ばれてるんでしょうか。
0594デフォルトの名無しさん
2014/09/25(木) 13:52:59.40ID:gq4fP5ox自分が答えていいのか分からんが、={・・・}の部分全体で「初期化子」
と命名されていて、=自体は演算子とは言われない。
0595デフォルトの名無しさん
2014/09/25(木) 15:21:13.91ID:p4SXJv8dありがとうございました。なるほど、C99で拡張されてからの命名なんですね。
0596デフォルトの名無しさん
2014/09/25(木) 15:26:55.86ID:9dnJaqAQいや、だいぶ昔のANSI Cの定義でも「初期化子」という呼び方は変わって
ないはず。
0597デフォルトの名無しさん
2014/09/25(木) 16:16:34.07ID:FkhkjqOZ知ったかぶりもいい加減にしたらどうだ。
構文上、初期化子(の=)と代入演算子(の=)は明らかに異なる。
明確にするもクソもない。
0598デフォルトの名無しさん
2014/09/25(木) 17:02:36.73ID:uEhi6Lrs0599デフォルトの名無しさん
2014/09/25(木) 18:07:39.07ID:yDHAaJNVそれ、分かりにくくないじゃん
0600デフォルトの名無しさん
2014/09/25(木) 19:28:54.76ID:IK+pLUz6それはQZを買いかぶりすぎ、QZにそこまで議論する能力はない
0601デフォルトの名無しさん
2014/09/25(木) 21:31:00.88ID:C75VVLj1>正しいかどうかを論じるなら規格文書を引いてこい。面倒なので俺はやらんがな!
これは偉そうではないのかい?
言葉少ないと思うなら聞き直してくれれば答えたよ。
0602デフォルトの名無しさん
2014/09/25(木) 23:24:10.15ID:9dnJaqAQそれを書いたのは自分ではない。
0603デフォルトの名無しさん
2014/09/26(金) 00:04:30.42ID:uohd10wmあなたは
「知ったかぶり」
という言葉の意味、誤解してない?
0604デフォルトの名無しさん
2014/09/26(金) 01:07:01.59ID:A85zS2F0えー???
じゃあ何で>>585へのレスに対して反応したの???
ちょっと、、、君も何と言うか。。。もう。。。
0605デフォルトの名無しさん
2014/09/26(金) 02:58:00.10ID:AYYTDtXl> オイラは>>583ではないが
ブーメラン乙
0606デフォルトの名無しさん
2014/09/26(金) 07:50:16.55ID:A85zS2F0あはは。
間違えた。
>>602
えー???
じゃあ何で>>583へのレス( >>583 )に対して反応したの???
ちょっと、、、君も何と言うか。。。もう。。。
だね。
0607デフォルトの名無しさん
2014/09/26(金) 09:54:05.53ID:qY859vRI意味不明。引っ込んでろ。バカ。
0608583
2014/09/26(金) 20:38:20.93ID:Hu/y6U8m>>583は横から来てコンパイル試したがperson3が関数になってることに気づかなかった野次馬だよ?
//丁度person3の後ろでperson4が生成されてるからオブジェクトの生成回数は7になるんだよなぁ…
>>585>>601
「CPerson person3();」関数宣言としては正しいし存在するじゃないか!(「試せば通る」し、>>587らしいし)
・・・そういう問題では無いですね、ごめんなさい。
0609デフォルトの名無しさん
2014/09/27(土) 07:47:41.57ID:7QDc7G/V正 野次馬鹿
0610デフォルトの名無しさん
2014/09/27(土) 09:47:35.95ID:aElzcEyCもうそれ以上傷口を広げ無くても良いのでは?
またもな人は面倒くさいから口出ししてないだけだと思うぞ
スレ発端は>>568だろうけど、好意的に見てもperson3の例をその文脈で持ってくるのはおかしい
そこに軽く突っ込んだ人がいて、真っ赤になって逆ギレ自演の嵐
0611デフォルトの名無しさん
2014/09/27(土) 16:53:57.34ID:Es6Y0cNh0612デフォルトの名無しさん
2014/09/27(土) 17:58:36.18ID:DE3jcZJuC/C++スレには自分がスゲーな奴で、行間読めない奴が住み付いてるから気をつけな
またお前かって感じ
言葉多く発狂してる方な
0613デフォルトの名無しさん
2014/09/27(土) 18:48:44.72ID:0z93SAz9英語圏で「alias」と呼ばれている仕様がある時期から導入されたらしい事を耳に
入れたが、まだ学んでない。typedef aaa=bbb; みたいなやつの事かな・・・。
using namespace xxx; みたいなのも勘で理解しているだけで厳密な仕様書は読んでない。
0614デフォルトの名無しさん
2014/09/27(土) 18:59:06.74ID:0z93SAz9↑ここに書いてあるね。
1. using aaa=bbb; と
2. template<xxx> using aaa=bbb<xxx>;
みたいなやつのことだったのか。
2番目の形式は、インスタンス化時にはaaa<xxx>と書かくのに、定義時には
aaaとだけでaaa<xxx>とは書かないんだね。class templateの場合もそうだ
けど。
0615デフォルトの名無しさん
2014/10/10(金) 22:06:36.37ID:LJYiMxQ90616片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/10/10(金) 22:14:36.53ID:naOIlr8a#define NDEBUGしているときはassertは取り除かれるので、
リリース時の性能には影響しない。
0617片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/10/10(金) 22:18:18.16ID:naOIlr8a処理全体に影響する状態を処理の外側に伝えるのに例外を使う。
0618片山博文MZ次期CEO ◆T6xkBnTXz7B0
2014/10/10(金) 22:29:29.93ID:naOIlr8a0619デフォルトの名無しさん
2014/10/11(土) 00:08:46.31ID:FL6g2QAmmain()の中に関数A()があり、その中にB()があります
main()で定義したvector1,vector2を参照渡しでB()内まで持って行くにはA()とB()の二段階で渡せば良いのでしょうか?
0620デフォルトの名無しさん
2014/10/11(土) 00:13:03.12ID:bs/sFubV0621デフォルトの名無しさん
2014/10/11(土) 00:17:26.95ID:37xXCw5p0622デフォルトの名無しさん
2014/10/11(土) 00:21:52.21ID:OlHZdekYありがとう
>>621
書いてみる
0623デフォルトの名無しさん
2014/10/14(火) 09:18:48.40ID:2DjoFVlOhファイルはincludeフォルダー
ではcppunitで作ったユニットテストのhとcppファイルは
どこに入れたらよいですか?
0624デフォルトの名無しさん
2014/10/14(火) 09:41:55.90ID:GdT+JZRZ個人的にはsrcとincludeに分ける必要もないと思う
0625デフォルトの名無しさん
2014/10/14(火) 10:15:05.74ID:A0D4+krRプロジェクト名のファイルを入れるフォルダ
機能毎に分けたファイルを入れるフォルダ
にしてるわ
0626デフォルトの名無しさん
2014/10/14(火) 10:50:39.94ID:OGTpBG0Cありがとうございます。
>>625
機能ごとというとプログラム名のフォルダーということですか?
linuxだとプログラムに拡張子をつけないしきたりで
大文字と小文字を区別するしきたりじゃないですか。
windowsの場合は大文字と小文字を区別しませんから
linux環境で
フォルダ名を大文字のプログラム名、プログラムを小文字のプログラム名に
してwindowsに輸入するとコピーできない問題があります。
0627デフォルトの名無しさん
2014/10/14(火) 10:56:53.46ID:PgFOtI120628デフォルトの名無しさん
2014/10/14(火) 11:36:29.63ID:zT0VwE4n完成したプログラムを収めるフォルダ作るとか出力先を考えれば良いんじゃないの?
プログラムをプロジェクトフォルダのトップ直下に持ってきたいなら、
プログラム実行時に不要なフォルダやファイルはsrcとかbuildの中に詰め込んで隠すとか。
0629デフォルトの名無しさん
2014/10/14(火) 12:28:43.13ID:A0D4+krR機能毎に分けたファイルを1つのフォルダへって意味ね
メイン + 自身 + オプションみたいな感じ
プロジェクトフォルダ
->メインフォルダ
->プロジェクトフォルダ
->機能毎フォルダ
->Debug
->実行ファイル
->Release
->実行ファイル
じゃあかんの?
0630デフォルトの名無しさん
2014/10/14(火) 14:21:37.63ID:OGTpBG0Cそれでいいです。
0631デフォルトの名無しさん
2014/10/14(火) 19:12:43.81ID:Xm+aC3qMまんぐり返しか
0632デフォルトの名無しさん
2014/10/15(水) 20:35:47.20ID:EiiFXnTiOSSのソース眺めてたら、
いわゆる普通の
ヘッダーにクラスやメソッドの宣言を書いて、
.cppに実装を書いて、ってやり方ではなく、
.hにも実装を書くし、
.cppにはテストコードとか書いてるし、
それで、hoge.cpp
に必要なすべてをincludeでつめこんで
hoge.cppをコンパイル&ビルドしてるんだけど、
こういうビルドの仕方ってなんて言うの?
なんか、こういう方式って名前付いてますか?
まあ、確かに、ソースコードの量が多くなると
リンク時に指定するオブジェクトファイルの数が多くなり過ぎるから、
必要なコードをすべてincludeしたファイルをコンパイルー>リンクした方が楽ってことなんだと思うけど.
ちなみにsconsでビルドしてます。
よろしくお願いします。
0633デフォルトの名無しさん
2014/10/16(木) 00:07:48.71ID:ngphL2uDboostなんかがそう
一部.cpp必要なコンポーネントあるが
0634デフォルトの名無しさん
2014/10/16(木) 00:35:35.47ID:v/vdzyZminclude先の.cppをコンパイルするたびに毎度毎度
その.hに書かれた処理がコンパイルされるんだろうか。。
0635デフォルトの名無しさん
2014/10/16(木) 01:32:31.88ID:UUyeR/ZQpimplイディオムとか特殊な事しないかぎりclassのメンバー変数は.hに書くだろ…
0636デフォルトの名無しさん
2014/10/16(木) 01:56:51.82ID:jyM9qn0X0637デフォルトの名無しさん
2014/10/16(木) 04:20:29.46ID:fYyW3P4Nプリコンパイル済みヘッダーでも作る、やり方なのかな?
0638デフォルトの名無しさん
2014/10/16(木) 21:29:14.55ID:prpAHb+Aassertは*.hに#define NDEBUGと書くと全滅する
0639デフォルトの名無しさん
2014/10/16(木) 21:46:59.52ID:6zTGqYumassert はバグ(=起きてはならないこと)を引っ掛けるため
例外はバグ以外の環境や操作ミスで起きる不都合(=避けられないこと)を回避するため
0640デフォルトの名無しさん
2014/10/17(金) 00:06:36.79ID:xsdfhOV6フォルダ構成とか
0641デフォルトの名無しさん
2014/10/18(土) 22:41:02.04ID:olwWpAy+何故だ?
0642デフォルトの名無しさん
2014/10/18(土) 22:56:36.20ID:jXLG/4NX0643デフォルトの名無しさん
2014/10/18(土) 23:58:56.82ID:olwWpAy+forのなかで要素を取り出したり書き込んだりしてるだけなんだが最適化とかあるのか?
5倍くらい速くなった、ベクターが配列を基に作られてるのが原因?
0644デフォルトの名無しさん
2014/10/19(日) 00:03:01.26ID:c/fNN/TF0645デフォルトの名無しさん
2014/10/19(日) 00:43:55.56ID:2zyUx+2N0646デフォルトの名無しさん
2014/10/19(日) 01:55:35.58ID:NJ9o05Xa・配列はスタックに取っていて確保を何度も行ってかつその部分まで計測している。
何にせよその5倍速くなったというコードを晒さないと何とも言えん
0647デフォルトの名無しさん
2014/10/19(日) 02:54:14.71ID:cw5JQu3z0648デフォルトの名無しさん
2014/10/19(日) 03:15:49.52ID:NJ9o05Xa計測してみた?
コンストラクタの無い型ならスタックから確保するのはスタックポインタ進めるだけだからヒープから取るより数倍どころじゃなく速いぞ
0649デフォルトの名無しさん
2014/10/19(日) 03:50:12.58ID:c/fNN/TF0650デフォルトの名無しさん
2014/10/19(日) 05:39:14.13ID:QL0HQqvqそのvectorと配列は本当に同じ処理をしてるコードなのか気になる
まさかvectorはサイズ指定もresize(),reserve()もせずに大量にpush_back()してて、
配列は最初に一括で確保してる…なんてオチじゃないよな
0651デフォルトの名無しさん
2014/10/19(日) 06:34:16.03ID:B5OPr43Gサイズが決まってんならstd::arrayの方がいいかと
0652デフォルトの名無しさん
2014/10/19(日) 16:52:49.49ID:nWUCBVo30653デフォルトの名無しさん
2014/10/19(日) 17:16:06.78ID:M9SKsKvjセルフ回答ですが、
調べたところ、Unity Build という名前が付いています。
すべての.hと.cppを上手い順序でひとつの.cppにインクルードして、このファイルだけビルド。
どこか1ヶ所変更するだけでも、全コンパイルし直す落ち度はあるが、ディスクIOが減るので高速にビルドできるらしい。
ちなみに、見ていたOSSでは、Unity .cpp でのみコンパイルが通ればいいから、各.hや.cppには必要なincludeが入っていない。
そのため、各.cpp単体ではコンパイルできないが、includeが無い分、ソースがすっきりしている感じだった。
(その代わり、IDEでソースを開くと真っ赤っかになる)
そして、モジュール単位にUnity.cppを用意して、アプリ全体のビルドでは10個程度のUnity.cppでビルドされていた。
これなら、コード修正の再ビルドが1つのモジュールの範囲に限定されるから賢いやり方かもしれないと思う。
0654デフォルトの名無しさん
2014/10/19(日) 19:38:43.86ID:Me0fGpTzvector http://codepad.org/oeUREsic
約0.0010秒
配列 http://codepad.org/EslbtY9s
約0.00011秒
ふぇぇぇなんでだよぅ自分のPCより差が出てるよぉ
0655デフォルトの名無しさん
2014/10/19(日) 21:46:18.06ID:cPpgakZM今試しに私のPCで動かしたんだが、殆んど変らないな。
--
$ g++ -O3 pow.V.cpp ; ./a |head -10000 |tail -1
0.0001107 10000
$ g++ -O3 pow.a.cpp ; ./a |head -10000 |tail -1
0.0001139 10000
0656デフォルトの名無しさん
2014/10/19(日) 22:16:52.45ID:cPpgakZMclock()使わないで、gettimeofday()でも使って、ループ回数を固定して実測してみたらどうだ?
それはさて、二乗を乗算に書き換えてCPUがx86なら実数演算をsseにやらせるようにすると目に見えて速くなるぞw
0657デフォルトの名無しさん
2014/10/19(日) 22:47:01.78ID:Me0fGpTzl/mなのはnを増やした時の計算時間を知りたかったからなんだ
あと、Linux使ってる?
調べてみたが
clock()はwinとlinuxでは何かが違うらしい
あとgettimeofday()はlinux専用みたいだ
0658デフォルトの名無しさん
2014/10/19(日) 22:50:24.78ID:Me0fGpTzsseはちょっと調べてみる
ちなみにvisual studio使ってるから裏で何かやってくれてるのかも
0659デフォルトの名無しさん
2014/10/19(日) 23:30:58.51ID:B5OPr43G0660デフォルトの名無しさん
2014/10/19(日) 23:54:18.00ID:c/fNN/TFvector 0.068
配列 0.070
VS2013 32bit Releaseバイナリ
Corei5 4460
当たり前だけど余り差は出なかったな
0661デフォルトの名無しさん
2014/10/20(月) 00:05:25.32ID:KSjZih3dVC++なら設定によってはコンテナのイテレータの範囲チェックを行うのでそのときはその分遅くなる
ttp://msdn.microsoft.com/ja-jp/library/aa985965.aspx
0662デフォルトの名無しさん
2014/10/20(月) 00:24:56.19ID:KSjZih3ddelete[] data1,data2;
は
(delete[] data1) , (data2);
であって解放されるのはdata1だけだからな
ttp://ideone.com/FFgcy5
0663デフォルトの名無しさん
2014/10/20(月) 00:48:30.18ID:ue6UcWSycodepadの最適化レベルは-O1
…ってかコンパイラ古すぎじゃね?
0664デフォルトの名無しさん
2014/10/20(月) 09:00:37.21ID:nHn9rVxH0665デフォルトの名無しさん
2014/10/20(月) 19:04:12.00ID:cRmJ92uN手元の5.5が4.1.2だ
0666デフォルトの名無しさん
2014/10/20(月) 19:06:55.40ID:w1uJ+QLuコンパイルや組み込みについて詳しく解説してあるサイトやおすすめの書籍などがあれば教えてください
手持ちのc++の本にはそこまで載っていない様で。。。
0667デフォルトの名無しさん
2014/10/20(月) 20:05:31.25ID:iwN/f8er0668デフォルトの名無しさん
2014/10/20(月) 21:18:41.31ID:e1ZIgcc9逆に考えるんだ。
コンパイラが勝手に速くしてくれるんだから、人間は楽な方を使うんだ。
0669デフォルトの名無しさん
2014/10/20(月) 21:49:25.94ID:xbA0pS9k0670デフォルトの名無しさん
2014/10/21(火) 03:40:13.94ID:spR4uLWzやりたい事を明記しなさい
0671デフォルトの名無しさん
2014/10/21(火) 05:44:41.14ID:w5FgyNfx結構凄いコードを吐くよ。
特に、avx対応コードで4並列に超越関数を演算しちゃうとか。
0672デフォルトの名無しさん
2014/10/21(火) 19:11:03.84ID:9kJQNkb/Visual studioで数値計算を高速化したいけどどんなテクニックがあるのかも知らないし、そもそもコンパイルについての知識もないから勉強したいなぁと
あと最適化、SSEについても
0673デフォルトの名無しさん
2014/10/22(水) 11:37:27.80ID:L59YbXQzレス、サンクス
最近のCPUはそれ自体が小さなベクトル型スパコンみたいなものですね
コンパイラのユーザーズ・ガイドを少し眺めてみたけど、最適化オプションはかなり奥が深そう‥
将来インテルの石でPCを組んだら無償お試し版で遊んでみたいなぁ
0674デフォルトの名無しさん
2014/10/22(水) 13:25:18.21ID:f7evsStmiccに頼らなくても、gccでも並列演算できなくはないよ。
コンパイラが勝手にやってくれるのと、自分でちまちま書くのとでは勝手が全く違うけどね。
0675デフォルトの名無しさん
2014/10/24(金) 12:34:54.94ID:+Tkev7fdこのサイトの「クラスからオブジェクトを生成する - パート3」
で「*」ポインタをつける必要が出てきたとあるんですが、
理屈がよくわかりません。
納得はいかないですがそういうものとして覚えておけばいいんでしょうか、、。
0676デフォルトの名無しさん
2014/10/24(金) 12:55:30.23ID:JJZzpP2bどこにそんな文がある?意訳?
0677デフォルトの名無しさん
2014/10/24(金) 13:00:21.51ID:2cfKwGQJパート3で突然インスタンスをnewで生成するようにしたから突然現れたと思われ。
それまではコンストラクタに引き数がなかったからnewしてなかったのだろう。
newでインスタンスを確保するからには、ポインタで保持する必要があるのは道理。
それならそれで、スマートポインタを使えと思わなくはないが。
0678デフォルトの名無しさん
2014/10/24(金) 13:03:18.04ID:2cfKwGQJこの実装の変更によって、これらのオブジェクトを生成する際に、メモリー内に領域を作成する必要がでてきました。それぞれのオブジェクトに対してポインター(メモリの参照)を作成することで、この操作が可能となります。
testApp.h(定義)に戻って、新規のオブジェクトを以下ように宣言するようにしましょう。
--
この星印(*)は、オブジェクトのためのメモリーの領域を作成したことを意味しています。
--
最初の行と最後の行の意訳だろ。
0679デフォルトの名無しさん
2014/10/24(金) 13:10:11.41ID:bzRiGdHm>>675のリンク先はいきなりnewを使用するようにしたりとか初心者向けにしては教え方のバランスが変
個人的にはそこを見て勉強することはおすすめしないな
0680デフォルトの名無しさん
2014/10/24(金) 13:11:11.21ID:+Tkev7fdなるほどそういうことか〜あざざっす。
newでインスタンス→ポインタ保持ってところ、
わかりやすいサイト探してみます。
0681デフォルトの名無しさん
2014/10/24(金) 13:16:28.28ID:+Tkev7fdフォローありがとございます〜
>>680
アドバイスありがとうございます。
変数もメモリに領域つくってるんでは?って思ってしまうんですが違うんですかね。
なんか必要性ってところで???となってしまいます。
0682デフォルトの名無しさん
2014/10/24(金) 13:18:23.81ID:SG4ZH+p9コンストラクタの変更とnewで生成する事は何の関係もない。
> このチュートリアルは、openFrameworksでオブジェクト指向プログラミングをするための簡単なイントロダクションと、自分のクラスを作成するためのHowToガイドです。
とあるので、openFrameworksではオブジェクトはnewして生成する流儀なのかも知れない。
openFrameworksつかってプログラミングする目的でない(OOPS入門として読む)ならば、そのページはうんこと断言して良い。
見なかった事にして忘れてしまえ。
0683デフォルトの名無しさん
2014/10/24(金) 14:19:17.13ID:2cfKwGQJ私も>682に同意。
C++のプログラミングとOOPの入門は別と思った方がいいと思う。
0684デフォルトの名無しさん
2014/10/24(金) 14:23:53.88ID:7uisWKAtそう?
デザパタ本なんか見ると
言語問わず似たりよったりだけどねぇ
0685デフォルトの名無しさん
2014/10/25(土) 04:55:43.73ID:b4QQd40Z文字コードや文字セットはシステム側が提供するものを利用するか、
ttfファイルとかをパースする(?)のかと思うんだけど。具体的な方法がわからん(´・ω・`)
0686デフォルトの名無しさん
2014/10/25(土) 06:05:25.04ID:dFV7jCVh0687デフォルトの名無しさん
2014/10/25(土) 06:41:17.06ID:BH5UYxjeプラットフォーム固有のAPIに渡す直前に必要に応じて変換
0688デフォルトの名無しさん
2014/10/25(土) 06:42:36.98ID:s5oEimPTttfとか言う辺りGUIでの日本語のことだと思うけど、C++にはGUI関連の機能自体が存在しない。
GUI関連は環境に合わせてライブラリなりAPIなりを持ってきて使うのでそちらの対応状況次第。
日本語非対応のAPI上で日本語扱う場合は、別途フォントエンジンを用意したりする。FreeType等。
只の文字データとしてなら、ロケールの対応範囲内でマルチバイト文字もワイド文字も扱える。
使用可能ロケールは環境依存なので、それ以外も扱う場合は別途ライブラリを用意したりする。libiconv等。
0689デフォルトの名無しさん
2014/10/25(土) 06:54:35.09ID:b4QQd40Zアプリケーションでエンコーディングするのに確立した方法があれば教えて(人・∀・)
あとそのAPI(システム・コール)とかある?
0690デフォルトの名無しさん
2014/10/25(土) 06:55:32.80ID:b4QQd40Zありがとうm(__)m
そのlibiconvとやらを漁ってみます。
0691デフォルトの名無しさん
2014/10/25(土) 09:38:59.85ID:s5oEimPTC99準拠のsetlocale、wcstombs、mbstowcsでも一応は変換できるよ。
文字コードの方でよかったのか…なんでttfが関係すると思ったんだw
0692デフォルトの名無しさん
2014/10/25(土) 12:31:43.72ID:Dq9yc3160693デフォルトの名無しさん
2014/10/25(土) 13:53:07.26ID:zmlgvAXzファイルI/O、ネットワークI/O
MBCSはいろいろと問題起こるから、基本wchar_t、wstring
0694デフォルトの名無しさん
2014/10/25(土) 14:36:05.45ID:B/NlI7do0695デフォルトの名無しさん
2014/10/25(土) 15:48:14.08ID:pojaJUJ1が、このコードのどこが悪いのでしょうか
http://codepad.org/8z4kZV7q
0696デフォルトの名無しさん
2014/10/25(土) 17:13:33.60ID:Gk5MgQ3X#include <stdio.h>
int main(){
int num[]={0},i=0,j=0;
while(1){
scanf("%d", &num[i]);
if(num[i]==100) break;
i++;
}
return 0;
}
上のような入力を受け取るプログラムなのですが、100と入力してもプログラムが終了しないことがあります。一桁の数値だとうまく終了してくれるのですが、なぜでしょうか?
0697デフォルトの名無しさん
2014/10/25(土) 17:15:53.51ID:USuaOmn0よく分からんけど、とりあえずアクセスしているアドレスを
確認してみては?
http://codepad.org/fvM6zFXS
0698デフォルトの名無しさん
2014/10/25(土) 17:16:50.14ID:FadhVfwr> int num[]={0}
100?
あふれちゃう
0699デフォルトの名無しさん
2014/10/25(土) 17:20:12.82ID:USuaOmn0一周目でも終了しないことがある?
よくわからんが、3行目を int num[10000]={0}; i=0; j=0; として解決するなら
buffer overflow だろう
0700デフォルトの名無しさん
2014/10/25(土) 17:24:17.75ID:Gk5MgQ3Xありがとうございます。初歩的なミスでしたね、申し訳ない
0701デフォルトの名無しさん
2014/10/25(土) 17:27:55.97ID:FadhVfwr101回めに100を入力しなければ抜けないから
問題あるんだけどね
0702デフォルトの名無しさん
2014/10/25(土) 17:29:20.54ID:FadhVfwrすまん
0703デフォルトの名無しさん
2014/10/25(土) 17:30:36.92ID:YY79eQIk0704デフォルトの名無しさん
2014/10/25(土) 19:16:47.25ID:RdqY+Ee30705デフォルトの名無しさん
2014/10/25(土) 19:47:32.79ID:zmlgvAXzなんで>>701-702と思ったのか興味ある
0706デフォルトの名無しさん
2014/10/25(土) 19:54:04.48ID:TLDzyjRn0707デフォルトの名無しさん
2014/10/25(土) 19:59:41.81ID:PupOMkEOいやいや、範囲外アクセスする可能性の残る
プログラムという話だろう
0708デフォルトの名無しさん
2014/10/25(土) 22:19:28.90ID:pojaJUJ1&v=0030fc08
ref=0030fc08
cast=3f800000
v.x = 1.000000
となって問題のある方のアドレスが3F800000(1.0F == v.x)になるんですよね
つまりどこかで間接レベルがずれているように見えるんですが
それだけだと一度参に受ければアクセスできるようになるという理由がわかりません
そもそもcodepadとこちらの環境で出力が違うということは、元のコードに環境依存の未定義な要素が含まれていたりするんでしょうか
0709デフォルトの名無しさん
2014/10/26(日) 04:54:56.99ID:fx3FFnF6溢れたってのは合ってるだろうけど、「値が100個」じゃなくて「100という値」だぞ。
>>705
「100という値」を「値が100個」と誤解したっぽいところまではわかるけどその先が謎くて興味深いね。
>>708
コンパイラのバグな可能性もあるけど俺にはわからないのでC++の偉い人にお任せしたい。
0710デフォルトの名無しさん
2014/10/26(日) 05:43:50.40ID:9iGJ9Vz2誤解しただけだよ
何故誤解したのかといえば
分からないとしか言いようがない
0711デフォルトの名無しさん
2014/10/26(日) 11:48:15.55ID:OKY31X3rtypedef struct _State {
const struct _State *(*stop)(const struct _State *pThis);
const struct _State *(*playOrPause)(const struct _State *This);
} State;
というふうに構造体を定義してるんだけど
*(*stop)(const struct _State *pThis)
これなんなのですか? 関数ポインタのポインタ?
教えてください
0712デフォルトの名無しさん
2014/10/26(日) 11:55:37.68ID:NHig/W5N0713デフォルトの名無しさん
2014/10/26(日) 12:45:51.44ID:OKY31X3r返り値がポインタってことか。ありがとうございます
0714デフォルトの名無しさん
2014/10/26(日) 13:15:25.63ID:IyPNYi4j0715デフォルトの名無しさん
2014/10/26(日) 13:30:50.51ID:eoLX8RNkそこでちょん切るな、その頭のアスタリスクは struct _State * の * だから
const struct _State *(*stop)(const struct _State *pThis);
全体で
stop は関数のポインタ、その引数は struct _State *、返り値は struct _State * 。
0716デフォルトの名無しさん
2014/10/26(日) 22:41:16.50ID:2UzQ9MnUboostを使ったコードをコード生成の設定をマルチスレッドにしてビルドしたいのですが、リンクエラーになってしまいます
マルチスレッドdllだとビルドは成功しますが、他のpcでもプログラムを使用したいのでマルチスレッドに設定してビルドしたいのです
どうすればいいでしょうか?
0717デフォルトの名無しさん
2014/10/26(日) 22:44:30.13ID:NHig/W5N0718デフォルトの名無しさん
2014/10/26(日) 22:44:52.32ID:USY7r1W5たしかバイナリ配布では全部のビルド設定網羅しているわけではなかったはず
0719デフォルトの名無しさん
2014/10/27(月) 19:48:59.26ID:+HXmgeNl静的リンクの場合はどのライブラリディレクトリを使えば良いのでしょう?
0720デフォルトの名無しさん
2014/10/27(月) 19:53:41.77ID:SHa9u56N内容でどの設定のライブラリとリンクしようとしているかわかるだろうに
なんでどいつもこいつもエラーの内容を隠したがるんだ
0721デフォルトの名無しさん
2014/10/27(月) 20:00:32.39ID:OMJ9cTFb0722デフォルトの名無しさん
2014/10/27(月) 20:36:55.38ID:USt2EpFvエラーが多すぎて全ては貼れそうにないのでエラーの一部です
1>LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
1>libcpmtd.lib(wlocale.obj) : error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数 "char * __cdecl std::_Allocate<char>(unsigned int,char *)" (??$_Allocate@D@std@@YAPADIPAD@Z) で参照されました。
1>libcpmtd.lib(xlocale.obj) : error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です。
1>libcpmtd.lib(xmbtowc.obj) : error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です。
1>test.obj : error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です。
1>libcpmtd.lib(stdthrow.obj) : error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です。
1>libcpmtd.lib(cin.obj) : error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です。
1>libcpmtd.lib(cout.obj) : error LNK2001: 外部シンボル "__CrtDbgReportW" は未解決です。
1>libcpmtd.lib(xwcsxfrm.obj) : error LNK2001: 外部シンボル "__free_dbg" は未解決です。
1>libcpmtd.lib(cout.obj) : error LNK2001: 外部シンボル "__free_dbg" は未解決です。
1>libcpmtd.lib(locale.obj) : error LNK2001: 外部シンボル "__free_dbg" は未解決です。
0723デフォルトの名無しさん
2014/10/27(月) 20:40:43.75ID:USt2EpFvどうしてエラーになるのでしょう?
0724デフォルトの名無しさん
2014/10/27(月) 20:49:09.62ID:jqalzcj4boostでデバッグ版のlibも作ったか?
0725デフォルトの名無しさん
2014/10/27(月) 20:50:09.36ID:USt2EpFvhttp://codepad.org/jP3gQ9dp
0726デフォルトの名無しさん
2014/10/27(月) 20:51:41.63ID:USt2EpFveigenも使っています
デバッグ版はオプションで指定するのでしょうか?
0727デフォルトの名無しさん
2014/10/27(月) 20:53:52.42ID:jqalzcj40728デフォルトの名無しさん
2014/10/27(月) 20:56:50.75ID:USt2EpFv/MTになっていたので/MTdにしたところエラーが27個から22個に減りました!
デバッグ版はデフォルトで作成されるそうです
0729デフォルトの名無しさん
2014/10/27(月) 21:11:58.39ID:USt2EpFvどうやら上手くいってしまったようです
0730デフォルトの名無しさん
2014/10/27(月) 21:19:48.23ID:qqJqOOtJたしか、/MTと/MDを混在させると、この手のエラーが出てきたように思う
プロジェクトの設定を全部見直した方がいいよ
0731デフォルトの名無しさん
2014/10/27(月) 21:26:36.69ID:USt2EpFvクリームしてなかったので混在してしまいあの競合エラーという分けですか、なるほど
0732デフォルトの名無しさん
2014/10/28(火) 07:20:08.73ID:4+xiP14a0733デフォルトの名無しさん
2014/10/28(火) 09:49:40.37ID:XK3wSZjJlibc/msvcrt、release/debug
全部統一しろよボケ
0734デフォルトの名無しさん
2014/10/30(木) 22:08:36.92ID:xQhnjzo9(取り敢えず調べた結果)
ANTLR 3 → 出力してもコンパイルが通らないソースが吐き出される
ANTLR 4 → まだC++がサポートされていません。(Wikipediaだと対応しているような事が書いてあるけど、英文だと「まだだよ」と明記)
flex/YACC → 現状の最終候補。 LALRで書きやすいけど、エントリポイントから始まるマクロ周りが面倒くさい
Kareidoscope → よくよく調べたらC++の自作構文解析器(clangのチュートリアル)
なんで市販品もないんだろう、と昔から思うんだ。
もうxmlliteとか、自作構文解析器とか、もう嫌なんだ。
0735デフォルトの名無しさん
2014/10/30(木) 22:11:07.19ID:P+CVnAvq0736デフォルトの名無しさん
2014/10/30(木) 22:29:15.01ID:yXSIxH7q0737デフォルトの名無しさん
2014/10/30(木) 22:42:06.30ID:P+CVnAvq0738デフォルトの名無しさん
2014/10/31(金) 15:26:37.90ID:zWE6Wm7IBNF完璧に実現できる
自己参照再帰、相互参照
0739デフォルトの名無しさん
2014/10/31(金) 15:29:35.46ID:zWE6Wm7Iそりゃ気にいるの探せ
0740デフォルトの名無しさん
2014/11/01(土) 16:49:44.50ID:K52d2Agm// int X(){return 0;} があるとして、
int& a = X(); // コンパイルエラー
int&& b = X(); // OK (ここまでは納得)
int& c = b; // これがOKなのは、どういう理屈なんでしょうか?
0741デフォルトの名無しさん
2014/11/01(土) 16:55:32.29ID:kactCSG00742デフォルトの名無しさん
2014/11/01(土) 17:17:08.40ID:K52d2Agm右辺値参照で渡された引数を他の関数に渡すときに move なり forward が明示的に要るのもそのためなんすね。
0743734
2014/11/02(日) 11:41:23.60ID:e1EY+Kdsカペルはまだ使ってないから試してみます
といいながら、構文解析器生成系を自作し始めた
取り敢えずLL(k)、字句に縛りを入れて作っている
車輪を作るために、金型を作り始めている気分
0744デフォルトの名無しさん
2014/11/03(月) 09:01:52.06ID:9+SOrZDLメモリ2枚刺しのpcで、配列をメモリ2枚にわたって使う時何か影響はありますか?
0745デフォルトの名無しさん
2014/11/03(月) 09:04:49.19ID:wj4A8VFW0746デフォルトの名無しさん
2014/11/03(月) 09:50:58.64ID:9+SOrZDL0747デフォルトの名無しさん
2014/11/03(月) 12:25:08.27ID:TUb68F1+>配列ってメモリに連続的に配置されるそうですね
論理的(プログラムから見たアドレス空間上)は連続して格納されますが
物理的(チップやメモリ・モジュール上)は連続して格納されるとは限りません。
インターリーブと呼ばれるメモリへのアクセスを高速化する技術があるためです。
というか最近のPCでデュアルチャネル以上のメモリ刺しを行う場合は、大抵、これです。
http://www.sophia-it.com/content/%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%AA%E3%83%BC%E3%83%96
C/C++でプログラムを組む上では気にすることは殆どないとおもうけど
メモリ2枚刺しで影響があり得るとすれば、両方のメモリの特性を揃えておかないと
フルパフォーマンスを引き出せない事とか、かな。
0748デフォルトの名無しさん
2014/11/03(月) 14:00:28.80ID:9+SOrZDL物理的に連続とは限らないのか、ふむふむ
0749名前は開発中のものです。
2014/11/03(月) 15:15:46.09ID:Ln7zQd5eなんか落とし穴があるんだっけ?
どこかで読んだ記憶があるのだが具体的な内容を忘れてしまった
0750デフォルトの名無しさん
2014/11/03(月) 15:19:40.73ID:f1DnjkKs0751デフォルトの名無しさん
2014/11/03(月) 15:35:58.10ID:TUb68F1+で、さらにさらに言いますと。
もし仮想アドレス空間を提供するOSを使っていて、OSがページング方式を採用していれば
ページサイズを超える(仮想アドレス上の)連続データが、物理アドレス上で連続するとは限りません。
http://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E8%A8%98%E6%86%B6
これはメモリモジュール「何枚刺し」に関係しませんが。
0752デフォルトの名無しさん
2014/11/03(月) 15:36:38.92ID:L63Nb35Fプログラムから見て連続したアドレスに配置されればいい
大抵仮想メモリをサポートしているから仮想アドレスが連続してればOK
747が書いた技術とはな〜んも関係無い
仮想メモリと高速化を一緒にしちゃいかん
0753デフォルトの名無しさん
2014/11/03(月) 15:50:15.48ID:L63Nb35F落とし穴ではないけど、たまに見かけるこれとか?
関数(int a[10])
{
… _countof(a) …
}
0754デフォルトの名無しさん
2014/11/03(月) 16:17:41.46ID:vIAe3tjG_countofマクロの落とし穴といえばポインタのことだろう。
_countofマクロに配列ではなくポインタを渡すと誤った値が生成される
0755デフォルトの名無しさん
2014/11/03(月) 16:19:51.78ID:wj4A8VFW0756デフォルトの名無しさん
2014/11/03(月) 17:07:01.24ID:gzxZLKcAしている。
0757名前は開発中のものです。
2014/11/03(月) 20:11:02.59ID:Ln7zQd5e構造体のパディングの都合で sizeof(array[0])が正しく
サイズを返さないことがあるとかだったような
勘違いしてるかも
0758デフォルトの名無しさん
2014/11/03(月) 20:20:59.49ID:vLChkxGXstd::arrayもいいぞ
0759デフォルトの名無しさん
2014/11/03(月) 21:26:14.62ID:hEttahKL0760デフォルトの名無しさん
2014/11/03(月) 22:56:26.18ID:hJid5R30勘違いと言うか、思い違いだろ。
0761デフォルトの名無しさん
2014/11/05(水) 20:58:27.04ID:zDHq5aQCあえて計算ミスをする(許容する)演算器やプログラムの開発トレンドなんですってな
非可逆圧縮とかなら多少ミスってても大した問題にならないという発想らしい
0762デフォルトの名無しさん
2014/11/05(水) 21:58:10.04ID:exu9r2/Kオッサン、ついて行けないんだったら 知ッタカでレスすんなや
0763デフォルトの名無しさん
2014/11/05(水) 22:01:56.22ID:TObpxnP70764デフォルトの名無しさん
2014/11/05(水) 23:19:09.09ID:+x9XCqU/0765デフォルトの名無しさん
2014/11/06(木) 09:50:18.54ID:guGhfN8S何に対して突っ込んでいるのか全く分からんのだが…
0766デフォルトの名無しさん
2014/11/08(土) 17:46:00.86ID:j3tDfl0T0767デフォルトの名無しさん
2014/11/08(土) 20:09:04.23ID:qgntwRxe0768デフォルトの名無しさん
2014/11/08(土) 20:33:33.98ID:om46DDyfそして単一の配列は仮想アドレスで連続するのでOK、物理配置とか知ったこっちゃねぇ、と。
0769デフォルトの名無しさん
2014/11/08(土) 21:14:40.24ID:qgntwRxe自分勝手に「実用上」とか前提条件をすり替えていちゃ回答にならない
0770デフォルトの名無しさん
2014/11/08(土) 22:57:32.68ID:/FoPAlKV0771デフォルトの名無しさん
2014/11/09(日) 01:41:14.23ID:Xu5ysykwいまどきのメモリではどっちみち、連続配置しないけどな。
0772デフォルトの名無しさん
2014/11/09(日) 09:38:16.91ID:4XuJgnqbハードでインプリしとるのに、仮想アドレスが連続してればOK、とかワケ分からんわw
何がOKなんだ!と小1時間(ry
0773デフォルトの名無しさん
2014/11/09(日) 10:52:55.54ID:q0q68Vhk752(念のため言うけど俺じゃないよ)が全く回答になってねぇってのは同感だけど、
それで767みたいな解釈はもっと斜め上だろ。回答になってない奴に変な濡れ衣着せてるだけにしか見えん。
>>770
そもそも質問の時点で連続配置って前提がおかしいからな、これ。
0774デフォルトの名無しさん
2014/11/09(日) 11:50:33.60ID:xhFguqYPpcにメモリモジュール2つさしたら、容量的に2枚に跨がるような大きい配列を作ることができるかと確認しているだけな気がするが。
0775デフォルトの名無しさん
2014/11/09(日) 13:12:23.62ID:T8NGFKFe入っているデータがなんなのかが全く分からない変数名で気持ち悪くないんでしょうか
0776デフォルトの名無しさん
2014/11/09(日) 14:07:52.70ID:dwdWovit0777デフォルトの名無しさん
2014/11/09(日) 14:14:36.44ID:T8NGFKFeそれとも3文字以上の変数名は長いということ?
0778デフォルトの名無しさん
2014/11/09(日) 14:22:06.61ID:J7KzW8BRしない人はどう区別してるん?
0779デフォルトの名無しさん
2014/11/09(日) 14:36:28.96ID:dwdWovit0780デフォルトの名無しさん
2014/11/09(日) 15:46:02.44ID:Bt9f9JFwが全く同じでもビルド出来るので実害は無いけれど、何と無く嫌なので
this->hensu=hensu_
みたいな余分な_を付ける私は心配性
ですか?本当は付けたく無いんですが。
_付きの変数って見た目が変ですよね。
髭が生えているというか鼻毛が伸びているというか不潔な感じ。
0781デフォルトの名無しさん
2014/11/09(日) 20:55:17.16ID:a0MM04w4Hoge* p = static_cast<Hoge*>(Hoge::new(sizeof(Hoge))); // 領域だけ確保
// 色々やる
::new(p) new Hoge(); // placement newでコンストラクタ呼び出し
// 色々やる
delete p; // deleteで普通に削除
ってやるのってNGなんすかね?
通常のnewで取得していないものを通常のdeleteに渡す辺りとか。
領域確保した上でコンストラクタの呼び出しを遅延させたいんですが…。
0782デフォルトの名無しさん
2014/11/09(日) 20:56:52.03ID:a0MM04w40783デフォルトの名無しさん
2014/11/09(日) 21:21:00.60ID:cg8/k+y/boost::in_placeとか使えば
0784デフォルトの名無しさん
2014/11/09(日) 21:36:43.66ID:tM1v0fJH> 領域確保した上でコンストラクタの呼び出しを遅延させたいんですが…。
そういうことをやりたければC++でもmalloc/freeで領域確保する
> 通常のnewで取得していないものを通常のdeleteに渡す辺りとか。
まわりまわって最終的にメモリ確保と解放の対応が正しければ問題にならなかったりするけど
基本的には問題ありでNG
0785デフォルトの名無しさん
2014/11/09(日) 22:12:05.36ID:a0MM04w4>>784 通常のdeleteで削除する部分が諸事情で変更できないので、難しそうっすね。ともあれNGコードは避けときます。
あざーす
0786デフォルトの名無しさん
2014/11/10(月) 03:46:28.21ID:x8aX3rE8>基本的には問題ありでNG
この部分よくわからない、new と delete が対になっておればなんら問題ないはず?
なんで NG なんだ?
0787デフォルトの名無しさん
2014/11/10(月) 09:59:35.70ID:e6eP1AW50788デフォルトの名無しさん
2014/11/10(月) 10:21:56.54ID:5fw2t1kv5.3.5 Delete
> (略) In the first alternative (delete object), the value of the operand of delete may be a null pointer value,
> a pointer to a non-array object created by a previous new-expression,
> or a pointer to a subobject (1.8) representing a base class of such an object (Clause 10).
> If not, the behavior is undefined. (略)
0789デフォルトの名無しさん
2014/11/10(月) 12:52:28.73ID:zRrCT9U7>>781 の Hoge::new の中に new があれば、規格に合致しているわけだよね
結局、ふつうにnewしてplacement new を被せれば OK ということか?
0790デフォルトの名無しさん
2014/11/10(月) 13:23:46.80ID:ADaLq/i0> 論理的(プログラムから見たアドレス空間上)は連続して格納されますが
> 物理的(チップやメモリ・モジュール上)は連続して格納されるとは限りません。
> インターリーブと呼ばれるメモリへのアクセスを高速化する技術があるためです。
↑は2枚刺しは「インターリーブ」のために物理的に連続しないよって言ってるんでしょ?
連続性で考えた場合、
・論理(仮想)アドレスの連続性
・物理アドレスの連続性
・物理的な連続性
があり、上記の回答では「論理(仮想)アドレスの連続性」と「物理的な連続性」について
言っているように見える。
しかし、「物理的な連続性」について言うなら、通常チップ単位でみたら1つの
チップでは1ビットが連続しているだけであって、バイト単位で保持されている
わけじゃない。
だから、インターリーブの話以前に(1枚であっても)物理的に連続しているとは
言えないわけだ。
(物理的な話が「メモリ・モジュール」だけならそんなに気にしなかったんだけど、
「チップ」まで書いているから、「物理的な連続性」の話として解釈した)
でも、質問者の意図を(想定されるスキルから)考えて、そこには無いと考え
(物理的なことは気にせず)仮想アドレスが連続していればいいと書いた。
0791デフォルトの名無しさん
2014/11/10(月) 16:46:12.24ID:8QediavH0792デフォルトの名無しさん
2014/11/10(月) 18:06:53.74ID:tFlOeqoPvoid f (void (A::*)() const &) {}
は、関数f の定義らしいのですが、引数の型が良く分かりません。
どういうことでしょう。
そもそも、定義だとすると、引数には型だけでなく、仮引数名が必要のはずですが、
それも省略されているように思えます。コンパイラによっては、関数定義内部で使わ
ない引数は、仮引数名を書いておくと警告が出てしまうので、仮引数名を省略することに
よって回避できるようですが。
A::* は、メンバへのポインタのようです。
const & の部分が一番分かりません。(A::*) の部分は、関数へのポインタのように思え、
その次の()は、その関数の引数の括弧で引数が無い場合のもののようです。その次に
const だけなら理解可能ですが、さらに & となるとこんなものは無い様に思えます。
0793デフォルトの名無しさん
2014/11/10(月) 18:09:51.53ID:tFlOeqoP単に「&」を書いたのですが、投稿時にこうなってしまったようです。
0794デフォルトの名無しさん
2014/11/10(月) 18:16:10.85ID:tFlOeqoPvoid (*&rpFunc)() const を
void (*)() const &rpFunc
と書く記法でもありましたでしょうか??
0795デフォルトの名無しさん
2014/11/10(月) 18:22:12.55ID:H0dF1SvN0796デフォルトの名無しさん
2014/11/10(月) 18:26:18.54ID:tFlOeqoPvoid (A::*)() const
であればそうでしょうが、実際は、
void (A::*)() const &
のように、最後に&が付いてます。
0797デフォルトの名無しさん
2014/11/10(月) 18:30:58.08ID:hfbf+gmfいい加減に他所でやれ
0798デフォルトの名無しさん
2014/11/10(月) 18:37:05.73ID:tFlOeqoPclass A {
void func1() const &;
};
というようなメンバ関数 func1() を記述できるとすれば理解可能ですが。
0799デフォルトの名無しさん
2014/11/10(月) 18:44:07.22ID:tFlOeqoP「Ref-qualified member functions」
なる仕様がC++11で追加されてたようです:
http://en.cppreference.com/w/cpp/language/function
http://stackoverflow.com/questions/19474374/what-is-the-purpose-of-ref-qualified-member-functions
0800デフォルトの名無しさん
2014/11/10(月) 23:19:51.02ID:I2gnUofF仮想アドレス以外連続する保障がなくて、連続しないものを全部数え上げたらバイトも入ったってだけじゃね?
ビット単位、バイト単位、チップ単位、モジュール単位、物理アドレス、仮想アドレス、連続するのは仮想だけ。
0801デフォルトの名無しさん
2014/11/11(火) 10:08:04.62ID:6g8qZa7Fhttp://codepad.org/OkeujLvX
this->が付いた時点で関数ポインタにはもう戻せないんですか
0802デフォルトの名無しさん
2014/11/11(火) 10:12:02.23ID:6g8qZa7F0803デフォルトの名無しさん
2014/11/12(水) 09:26:17.12ID:+hAxVh0Fhttp://ja.wikipedia.org/wiki/%E4%BB%AE%E6%83%B3%E9%96%A2%E6%95%B0%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB
class B2
{
public:
virtual void f2() {}
int int_in_b2;
};
class D : public B1, public B2
{
public:
virtual void d() {}
virtual void f2() {} // B2::f2() をオーバーライド
int int_in_d;
};
virtual method table of B2:
+0: B2::f2()
+4: B2::~B2()
virtual method table of D (for B2):
+0: D::d()
+4: D::f2() // B2::f2() is overridden by D::f2()
+8: D::~D()
の部分、B2::f2() と D::f2() の位置(エントリー)がずれていませんか?
0804デフォルトの名無しさん
2014/11/12(水) 09:30:08.28ID:+hAxVh0F「D *d = new D();
B1 *b1 = dynamic_cast<B1*>(d);
B2 *b2 = dynamic_cast<B2*>(d);
d と b1 が実行時に同じメモリ位置を参照するが、 b2 は d+8 (d のメモリ配置
の 8バイト後方)を示す。 そのため、b2 は d 内の B2 らしく見える領域、
すなわち B2 のインスタンスと同じメモリレイアウトを持つ部分を示す。」
英語版Wikipediaでは:
d:
+0: pointer to virtual method table of D (for B1)
+4: value of int_in_b1
+8: pointer to virtual method table of D (for B2)
+12: value of int_in_b2
+16: value of int_in_d
Total size: 20 Bytes.
virtual method table of D (for B1):
+0: B1::f1() // B1::f1() is not overridden
virtual method table of D (for B2):
+8: D::f2() // B2::f2() is overridden by D::f2()
となっており、DのB2用のvtableの D:f2() の位置がまた違っている。
日本語版では、+4の位置なのに、英語版では+8の位置。
自分の考えでは、「+0」が正しい位置のように思えます。
0805デフォルトの名無しさん
2014/11/12(水) 09:44:44.73ID:F2eOZHeQ0806デフォルトの名無しさん
2014/11/12(水) 10:02:55.65ID:+hAxVh0F0807デフォルトの名無しさん
2014/11/12(水) 12:10:45.75ID:Z7AJFaDD既存のコンパイラの出力結果に何かしたいのなら
それに合わせないといけない。
Wikipediaは履歴を見れば分かるけど日本語版は英語版の
2008年前半頃のままっぽい。
英語版でも過去には「+0」と記述されている。
結局は自分で調べるしかないと思う。
0808デフォルトの名無しさん
2014/11/12(水) 13:10:18.81ID:XEt4RGecDのポインタに対してDのvtblを見るならそれで足りるんじゃないの
0809デフォルトの名無しさん
2014/11/13(木) 21:05:08.87ID:5RyPxF5Z?
0810デフォルトの名無しさん
2014/11/14(金) 16:38:56.33ID:y3t1ubsgやはり何かの間違いかもしれませんね。
狂いが生じている理由について、
「vtable全体 [virtual method table of D (for B2)]」の先頭アドレス
とオブジェクトに書かれている
「vtable へのポインタ」 // +8: pointer to virtual method table of D (for B2)
とがずれている可能性があることです。
「vtable全体」には、「RTTI情報へのポインタ」と、「オブジェクト全体の先頭アドレスへの
オフセット」のようなものが先頭付近にあり、その後に仮想メンバ関数のアドレス・テーブルが
あるようで、オブジェクトに書かれている vtable へのポインタは、後者のアドレス・テーブル
の先頭アドレスをさしている可能性があります。
vtable 全体:
+0 オブジェクト全体の先頭アドレスへのオフセット
+4 RTTI情報へのポインタ
----仮想メンバ関数のアドレス・テーブルの先頭----
+8 仮想関数1のアドレス
+12 仮想関数2のアドレス
・・・
これがWikipediaの記述がおかしくなっている理由ではないでしょうか。
0811デフォルトの名無しさん
2014/11/14(金) 21:17:02.31ID:UbygtGe40812デフォルトの名無しさん
2014/11/14(金) 23:20:09.48ID:vEy7KEZr辞書的にはいくつか意味がありますが、そのうちの
「〔権威あるものに対する〕嘆願、訴え」
のこと、つまり、「修正要請」のことですか?
0813デフォルトの名無しさん
2014/11/15(土) 00:20:36.40ID:jAtUM3ml0814デフォルトの名無しさん
2014/11/15(土) 17:09:11.92ID:EFct/v5k呼び出すとか起動する、の invoke 名詞化
ttp://codic.jp/entries/invoke
0815デフォルトの名無しさん
2014/11/17(月) 23:42:34.25ID:LwbKAExF>>811
そういえば、そのinvocationの部分を読んでみると、英語版では、
ちゃんと:
(*((*d)[0]))(d)
(*(*(d[+0]/*pointer to virtual method table of D (for B1)*/)[0]))(d) /* Call d->f1() */
(*(*(d[+8]/*pointer to virtual method table of D (for B2)*/)[0]))(d+8) /* Call d->f2() */
となっているのに、日本語版では:
*((*d)[0])(d)
*((d->/* Dの(B1用の)仮想関数テーブルへのポインタ*/)[0])(d)
*((d->/* Dの(B1用の)仮想関数テーブルへのポインタ*/)[12])(d)
*((d->/* Dの(B2用の)仮想関数テーブルへのポインタ*/)[0])(d+8)
となっていて、わけ分からんことになってますね。
* を囲う() がないと、関数呼び出しだとわからない。
最初見たとき関数呼び出しっぽいが、よく理解できないと思ったんですが、
英語版だとちゃんと理解できる(正しい)表記になっていますね。
0816デフォルトの名無しさん
2014/11/18(火) 00:40:09.64ID:dTS5KRdo他人任せにせず自分で改訂しろよ
そのためにwikipediaだろ
0817デフォルトの名無しさん
2014/11/18(火) 23:23:49.07ID:AfINYphqWikipediaがなければ、今頃 gcc の vtable について書かれた書籍でもあった
かも知れないのに、Wikipediaがあることによって書籍を出版することが出来
なくなってしまっている可能性がある。
つまり、Wikipediaに書く人がいればいるほど、良質の情報源が減る可能性
がある。
0818デフォルトの名無しさん
2014/11/18(火) 23:27:30.77ID:oZpUE+lI問題ない
0819デフォルトの名無しさん
2014/11/19(水) 00:38:36.69ID:lnFQGeQLwikipedia無かったら質が下がると思うが
0820デフォルトの名無しさん
2014/11/19(水) 01:10:00.51ID:Z4qTxOUt心配しなくても、Wikipediaが存在しなかったはるか昔から、書籍の質は
高かった。
>>818
質が高くても、現実には売り上げが減るかも知れないんだよ。
0821デフォルトの名無しさん
2014/11/19(水) 02:50:47.75ID:uIresU5p0822デフォルトの名無しさん
2014/11/19(水) 21:23:57.97ID:dkgYBCwc糞みたいな本多いじゃん
0823デフォルトの名無しさん
2014/11/19(水) 22:53:15.93ID:QB/q/+7G更新されない集合知は、腐るのも早い。
0824デフォルトの名無しさん
2014/11/19(水) 22:59:52.26ID:QB/q/+7Gビューロクラットだか、記事評論家だか知らないが、
荒しの如くに「要出典」のコメントだけ付けて訂正編集しない連中が、選挙で利権を争う姿を見ていると、吐き気がするんだ。
【お前らの方が荒しだろ】って言いたかった。
スレ汚しすまん。
0825デフォルトの名無しさん
2014/11/20(木) 00:24:36.16ID:TrsJQyqJウィキペディアは独自研究を発表する場ではありません。
0826デフォルトの名無しさん
2014/11/20(木) 08:29:57.39ID:MP59TUjQいやいや
そこを否定したらwiki全否定だから
0827デフォルトの名無しさん
2014/11/20(木) 08:46:57.29ID:TrsJQyqJそこ?
ウィキペディアは何ではないか を読んで出直してこい
0828デフォルトの名無しさん
2014/11/20(木) 10:24:21.11ID:pjiqM021ウィキペディアの記事によっては、冒頭で、
「独自の研究と思われる文章が‥云々 出典を明示して下さい」みたいな注意書きが入る
0829デフォルトの名無しさん
2014/11/20(木) 10:30:25.85ID:R6MHdiw+0830デフォルトの名無しさん
2014/11/20(木) 11:10:06.13ID:3nar01e/ユーモアがないと怒られるが
0831デフォルトの名無しさん
2014/11/20(木) 15:15:38.65ID:OMlJz/ud0832デフォルトの名無しさん
2014/11/20(木) 21:58:39.73ID:pv69b1+Rsyncthreadsとthreadfence_blockの違いが分かりません
syncthreadsだけで十分な気がします
0833デフォルトの名無しさん
2014/11/21(金) 08:32:39.90ID:iFQePu0OCUDAスレへどうぞ。
あなたがそれで充分だと思ったのなら、あなたには必要のない違いなのでしょう。
0834デフォルトの名無しさん
2014/11/23(日) 02:13:40.97ID:ZuX0TPwi和んだ
0835デフォルトの名無しさん
2014/11/24(月) 21:44:10.26ID:2E7YTyCeその配列のメンバ変数にアクセスしようとすると
NullReference が出てしまいます。
クラス1
public クラス2[] array = new クラス2[3];
クラス2
public int number = 0;
使う時(エラーになる)
クラス1.クラス2[0].number = 999;
こんな感じです。
ビルドエラーは出てないのですが、
999 を入れるときに
Null Reference になります。
原因がわかる人いたら教えて下さい。
0836デフォルトの名無しさん
2014/11/24(月) 21:46:01.72ID:2E7YTyCe使う時(エラーになる)
クラス1.array[0].number = 999;
0837デフォルトの名無しさん
2014/11/24(月) 21:47:37.74ID:t3vESlZpC++/CLIのスレに行きなさい
0838デフォルトの名無しさん
2014/11/24(月) 21:48:28.69ID:U0unJI5C0839デフォルトの名無しさん
2014/11/24(月) 22:05:59.29ID:2E7YTyCe出来ました!
ありがとうございます、ありがとうございます!
>>837
ごめんなさい、その区分けすらわからんのです。
ちなみに unity です。
unity スレで聞くと初歩的過ぎて怒られそうだったので。
0840デフォルトの名無しさん
2014/11/24(月) 22:16:33.93ID:ZSGM05eVん…?Unityって確か
・UnityScript: JavaScriptをベースに拡張
・Boo: Pythonをベースに(ry
・C#
の3言語じゃないっけ?ここはC/C++のスレだよ?
C#スレの誤爆?
0841デフォルトの名無しさん
2014/11/24(月) 22:17:28.08ID:ZSGM05eV14ってどこだ俺…?
0842デフォルトの名無しさん
2014/11/24(月) 22:40:50.39ID:ALHBj7yp>>837が言ってるのはそういうことだと思うぞ
0843デフォルトの名無しさん
2014/11/24(月) 23:42:17.40ID:ZSGM05eV/CLIのスレでもスレチじゃね…って話でもあるよ
0844デフォルトの名無しさん
2014/11/30(日) 21:05:49.36ID:1fWIVRzvC++をやっていたらいつの間にか
C++/CLIの領域に踏み込んでいました。
これはMSの罠ですか?
0845デフォルトの名無しさん
2014/11/30(日) 21:29:21.63ID:CJTIqzdjそう、おっちょこちょいトラップだよ
はまった奴は君が初めてだけど w
0846デフォルトの名無しさん
2014/12/03(水) 20:04:59.05ID:tn8Qtf24ファイル操作で開いたファイルの中身を一部削除するにはどんな関数を使えばいいのでしょうか
上書きや追記と違い中々見つからないので質問します
0847デフォルトの名無しさん
2014/12/03(水) 20:14:52.34ID:U2a4HdIu自分で読み込んで自分で加工し自分で上書きするしかない
0848デフォルトの名無しさん
2014/12/03(水) 20:15:20.42ID:U2a4HdIu0849デフォルトの名無しさん
2014/12/03(水) 20:20:33.13ID:GXUScfW30850デフォルトの名無しさん
2014/12/03(水) 20:21:29.03ID:U2a4HdIu0852デフォルトの名無しさん
2014/12/03(水) 20:34:35.50ID:o987ZOafWindowsならSetEndOfFile
0854デフォルトの名無しさん
2014/12/03(水) 21:25:20.86ID:5dbPIVbA途中のデータを消して詰めたいのなら、やっぱり読み直して
書きなおした後で縮めないといかんです。
0855846
2014/12/04(木) 00:16:00.50ID:247S7oEQtruncateを知らなければ見つけられなかったと思います。ありがとうございました
0856デフォルトの名無しさん
2014/12/06(土) 00:05:51.34ID:q7blqefOやりたいことは
const int SIZE=4;
int a[SIZE]; //4
int b[log_2(SIZE)]; //2
のように配列を確保することです
0857デフォルトの名無しさん
2014/12/06(土) 00:10:43.84ID:iExVqmns0858デフォルトの名無しさん
2014/12/06(土) 00:22:43.82ID:tAcOC+EOhttp://stackoverflow.com/questions/2255177/finding-the-exponent-of-n-2x-using-bitwise-operations-logarithm-in-base-2-o
0859デフォルトの名無しさん
2014/12/06(土) 01:33:34.59ID:q7blqefOキャストじゃlogの出力が3.99999みたいになったとき3になるじゃないですか
>>858
ありがとうございます
まだよく読んでないですが参考にしてみます
0860デフォルトの名無しさん
2014/12/06(土) 01:59:18.66ID:K1bvfHJPその用途向けならたいして難しくないだろう
0861デフォルトの名無しさん
2014/12/06(土) 02:07:36.09ID:q7blqefO0862デフォルトの名無しさん
2014/12/06(土) 11:49:32.16ID:u7jjfD/c0863デフォルトの名無しさん
2014/12/06(土) 12:15:07.99ID:pl1CQQsq0864デフォルトの名無しさん
2014/12/06(土) 13:17:45.73ID:SX3gYLWG0865デフォルトの名無しさん
2014/12/06(土) 13:42:50.79ID:BM1MQEaE0866デフォルトの名無しさん
2014/12/06(土) 13:54:13.87ID:pl1CQQsq0867デフォルトの名無しさん
2014/12/06(土) 15:54:32.51ID:s2cU1r590868デフォルトの名無しさん
2014/12/06(土) 16:00:43.05ID:FWmjRtxdその例通りだとすると、log2(16)で3が返ってきたらいやだろう
0869デフォルトの名無しさん
2014/12/06(土) 19:51:04.38ID:0URk8sf5なんでやねんどういえばいいねん?
0870デフォルトの名無しさん
2014/12/06(土) 22:39:06.28ID:FKpX6QxP0871デフォルトの名無しさん
2014/12/07(日) 06:56:34.45ID:8JlYHdxZ0872デフォルトの名無しさん
2014/12/07(日) 08:31:29.57ID:68yN0EBG○○が君にはふさわしいねって言えばいんじゃね?
0873デフォルトの名無しさん
2014/12/07(日) 09:39:40.27ID:bfkTF4nNそもそもcmathのlogって領域確保に使えなくね?
0874デフォルトの名無しさん
2014/12/07(日) 13:06:03.34ID:yTMn9VdC理由書かないと単なるバカに見えるぞ
書いてもバカのままかもしれないけど
0875デフォルトの名無しさん
2014/12/07(日) 18:56:30.56ID:68yN0EBG戻り値をどう使いたいかに依るね。
だから、「使えない」という判断は明らかな誤りだな。
明白な誤謬を犯すような人間は自分で自分を馬鹿だ
と証明したことになる。
0876デフォルトの名無しさん
2014/12/08(月) 00:18:54.52ID:DldRzckq0877デフォルトの名無しさん
2014/12/08(月) 21:41:30.45ID:g1yYihY2C++プロジェクトのlibファイルを参照し、includeファイルをC++/cli側に
持ってきて#include すると、物凄い数のエラーがでます。
(C2011:C2079:C2504:C3395:C3699)
[1] C++/cliで参照できるよう、ビルドエラーを直すしかない
[2] 別の方法でC++の関数をビルドエラー無しに参照できる。
ちなみに、C++の関数を参照しないで自作・・・という回答は無しでお願いします。
0878デフォルトの名無しさん
2014/12/08(月) 23:38:12.56ID:2IK4zUKLhttp://peace.2ch.net/test/read.cgi/tech/1268613679/
0880デフォルトの名無しさん
2014/12/21(日) 12:53:52.93ID:+qwmhbzu当方環境(vista 32bit)ではgifwrite.cに問題があるようでVC、bcc共にダメでした
適切なスレがあればご誘導下さい
0881デフォルトの名無しさん
2014/12/21(日) 13:05:34.28ID:HpxqpUIEhttp://ja.stackoverflow.com/
0882デフォルトの名無しさん
2014/12/21(日) 14:14:34.29ID:S+pWOghM0883デフォルトの名無しさん
2014/12/25(木) 20:48:16.11ID:/j+MCuLw現在の地域時間から15時間後の日時を表示するプログラムを作成しなさい。
表示形式は日付と時間が表示されれば、自由とする。
0884デフォルトの名無しさん
2014/12/25(木) 20:59:19.24ID:PIT60xPK0885片山博文MZ ◆T6xkBnTXz7B0
2014/12/25(木) 21:03:12.54ID:gEw73of1#include <stdio.h>
#include <time.h>
main(){
time_t t = time(NULL);
t *= 15*60*60;
puts(ctime(&t));
}
0886デフォルトの名無しさん
2014/12/25(木) 21:07:20.41ID:/j+MCuLwありがとうございました!
0887片山博文MZ ◆T6xkBnTXz7B0
2014/12/25(木) 21:38:58.78ID:gEw73of1×t *= 15*60*60;
○t += 15*60*60;
0888デフォルトの名無しさん
2014/12/25(木) 23:08:26.83ID:2tgECDMqいまideoneで試したんだけど…
t += 15*60*60; だと
http://ideone.com/nYtNBt
Sat May 13 11:57:08 2000 ← 2000年 ???
t += (time_t)15*60*60; だと
http://ideone.com/MHmlGA
Fri Dec 26 06:13:18 2014
になります。
ideoneのコンパイラのバグ?
0889デフォルトの名無しさん
2014/12/26(金) 00:10:39.23ID:qv+SuoRHif(a==1){
if(b==1)}
if・・・{
〜
}
}
}
と
if((a==1)&&(b==1)&&(・・・{
〜
}
って条件が2,3個だったら大して違いはなさそうな気はしますが
条件の数が多ければ多いほど上の方が軽いように思ってますけどあってますか?
0890デフォルトの名無しさん
2014/12/26(金) 00:23:53.69ID:rmtyj2850891デフォルトの名無しさん
2014/12/26(金) 00:30:09.80ID:0K0HmtAp環境(コンパイラ)によると思われるが(おそらく)同じ。
入れ子の場合、aが0以外なら一番外側の if(...){} の次の命令にジャンプするわけだが
1行で書いた場合も、その書き方なら a を判定し偽だったら if(...){} の次の命令にジャンプする。
つまりどちらでも偽判定になった時点で if を抜けるので結果は同じ。
0892デフォルトの名無しさん
2014/12/26(金) 00:36:15.23ID:qv+SuoRH下の方は途中の結果関係なく全部参照して真偽を見ると勝手に思っていました
ありがとうございました
0893デフォルトの名無しさん
2014/12/26(金) 01:53:43.48ID:EqAHHrNcA && B、A || B
で、後ろの文のBに、副作用がある場合、
その副作用が実行されるかどうかわからないから、
こういうプログラミングをすると危ないぞ。使うなよ
0894888
2014/12/26(金) 02:09:02.52ID:hkDjJ4P3ideoneのコンパイラのバグでしょうね…
何度か確認したら、>>888の
> http://ideone.com/nYtNBt
> http://ideone.com/MHmlGA
両方共、実行するたびに2000年だったり2014年だったりバラバラでした。
https://paiza.io/projects/Syg0Sx2VaGtnliDMaAkBiw
の方は、ちゃんと2014年だけ出ますが。
0895デフォルトの名無しさん
2014/12/26(金) 02:12:25.35ID:nS4v0Az9副作用って何だよ?
A && B、A || B
って書いても問題ないだろ。
0896デフォルトの名無しさん
2014/12/26(金) 02:28:00.48ID:hkDjJ4P3例えば
int f1 = func1(), f2 = func2(); // 必ず実行すべき処理 1, 2
if(f1 || f2)
{
//…
}
ならば必ず func2() が実行されるけど、
if(func1() || func2())
{
//…
}
だと func2() が実行されなくて問題だ。ということでしょう。
0897デフォルトの名無しさん
2014/12/26(金) 02:32:02.65ID:hkDjJ4P3後者の判定式だと func1() の結果がゼロ(偽)だったら
func2() が実行されない
0898デフォルトの名無しさん
2014/12/26(金) 02:34:02.11ID:hkDjJ4P3>>896
× > だと func2() が実行されなくて問題だ。ということでしょう。
○ > だと func1() が真だったとき func2() が実行されないので問題だ。ということでしょう。
0899893
2014/12/26(金) 02:48:04.42ID:EqAHHrNc副作用とは、何かの状態が変わってしまうこと。
変数を更新してもいけない
MISRA-C 2004 ルール12.4 で、
&&,||の右側のオペランドに、
副作用があってはならないと規定されている
短絡評価で、Bが実行されたりされなかったりするが、
それを知らないプログラマーもいて、
Bが常に実行されると勘違いしている人もいるから、
この書き方を使うなと
0900デフォルトの名無しさん
2014/12/26(金) 03:58:33.04ID:D07w3ybzそうでないと、if (pointer != NULL && * pointer != 0)みたいなコードも書けなくなる。
0901デフォルトの名無しさん
2014/12/26(金) 10:44:30.12ID:mKbPINot未定義エラーなんて出ないんだから
どう解釈されるか分からなくて危ないぞ
0902デフォルトの名無しさん
2014/12/26(金) 12:27:57.01ID:nS4v0Az9書けるだろ。
0903デフォルトの名無しさん
2014/12/26(金) 12:44:53.88ID:9UUmCfg50904デフォルトの名無しさん
2014/12/26(金) 12:59:16.28ID:oTq4KPQc短絡評価を知らないプログラマは>900のコードをどう解釈すると思っているんだ?
0905デフォルトの名無しさん
2014/12/26(金) 13:01:46.63ID:qv+SuoRH普通に変数の比較でも&& ||を使うのもやめた方がいいんですかね?
0906デフォルトの名無しさん
2014/12/26(金) 13:05:14.66ID:y3Oe54D20907デフォルトの名無しさん
2014/12/26(金) 13:06:43.68ID:oTq4KPQc「短絡評価」を理解できていれば、どんどん使えばいいよ。
尤も、関数に見えるものが本当に関数かそれとも関数型マクロなのか分からないケースもあるから、
そもそも条件判断の中で関数呼ぶのは避けた方がいいと言うこともあるね。
0908デフォルトの名無しさん
2014/12/26(金) 13:10:31.94ID:/tniFmZf0909デフォルトの名無しさん
2014/12/26(金) 13:23:10.85ID:5vBQJBUkMISRA-Cでも短絡評価自体は警告対象じゃない
短絡評価の右オペランドに副作用ありの式を入れるなって言ってるだけ
0910デフォルトの名無しさん
2014/12/26(金) 13:27:58.14ID:qv+SuoRH一般的なC言語入門サイトだと& |ではなくて&& ||を教えてますよね…
& |の存在自体知らなかったので覚えておきます
0911デフォルトの名無しさん
2014/12/26(金) 13:30:34.73ID:oTq4KPQc0912デフォルトの名無しさん
2014/12/26(金) 13:37:15.92ID:qv+SuoRHつまり if( A && B && C )があった時、Aが0だったらそれ以降は判定(実行)されないってのを覚えておけば問題ないって事ですか?
で& | は別モンだから今は気にするなって事でしょうか?
0913デフォルトの名無しさん
2014/12/26(金) 13:57:07.38ID:nS4v0Az9その通りだ
0914デフォルトの名無しさん
2014/12/26(金) 13:58:10.39ID:y5Wm5xR70915デフォルトの名無しさん
2014/12/26(金) 14:16:46.54ID:PAH/8l9T& や | はビット(2進法での各桁)ごとに論理演算した結果を計算するものだから別物だね
int a = 24482; // = 101111110100010
int b = 255; // = 11111111
int c = a & b; // = 10100010
int d = a | b; // = 101111111111111
まあ、初心者のうちはあまり使うものでも無いだろうな
強いて言えば、ライブラリとかで色んなフラグが指定できるとき
各フラグが 1(=001), 2(=010), 4(=100) みたいな数値になってたりするんだが
そういうのは FLAG1 | FLAG2 | FLAG3 みたいに合成するを前提にしてる、くらいか
0916デフォルトの名無しさん
2014/12/26(金) 14:19:45.08ID:PAH/8l9T久々にブラウザから投稿したもんだから、&に注意してなかった
0917デフォルトの名無しさん
2014/12/26(金) 15:57:54.06ID:PUSaAK8wなか?
0918デフォルトの名無しさん
2014/12/26(金) 17:09:07.74ID:0K0HmtApaが0以外なら のところ誰も突っ込まなかったね
脳内変換してくれていたんだろうけどw
もし脳内変換していない人がいたら aが1以外なら に修正でwww
>>912
&& や || ってのは論理演算子
& や | はビット演算子
演算子には優先順位があるので覚えておいたほうがいいよ
身近な例だと2項演算子の + や - より × や ÷ のほうが優先とかね
http://ja.wikipedia.org/wiki/%E6%BC%94%E7%AE%97%E5%AD%90%E3%81%AE%E5%84%AA%E5%85%88%E9%A0%86%E4%BD%8D
(http://ja.wikipedia.org/wiki/演算子の優先順位)
0919デフォルトの名無しさん
2014/12/26(金) 17:15:27.36ID:t6BjXhwG読みにくいだのスマートじゃないだの言われても俺は全部括弧を付けるぜ…
0920デフォルトの名無しさん
2014/12/26(金) 18:09:31.16ID:oTq4KPQc0921デフォルトの名無しさん
2014/12/26(金) 18:31:41.94ID:mKbPINot0922デフォルトの名無しさん
2014/12/26(金) 20:42:37.13ID:qv+SuoRHマクロを括弧で括る?
0924デフォルトの名無しさん
2014/12/27(土) 01:22:14.02ID:Pwz5s1xQ(fputs("a"))ってこと?
0925デフォルトの名無しさん
2014/12/27(土) 11:14:16.24ID:miqkgc9tに関連して質問なのですが、複数の条件をパスした場合に目的の処理を行いたい場合、
if(a){
if(b)}
if(・・・){
目的の処理
}
}
}
と
if(!a)
return;
if(!b)
return;
if(!・・・)
return;
目的の処理
のどちらの書き方がお勧めでしょうか?私はなんとなく後者派です。
0926デフォルトの名無しさん
2014/12/27(土) 11:35:38.42ID:Xe8/BGM10927デフォルトの名無しさん
2014/12/27(土) 11:56:57.64ID:W6COMWk1今時は、if文の書き方で重いとか軽いとか気にする必要は無い。
最適化で全然違うコードに変わったりするし。
一番重要なのは、そのソースコードが人間にとって解り易いかどうか。
それを一番気にすべき。
>>925
なので、後者の方が、不要な条件のケースを先に除外していくことで、
if文のネストという判り難さが排除出来て、シンプルに目的の処理が記述出来るので、
俺もこっちで書くことが多い。
念の為。関数の出だしからの記述という場合な。
ifとelseでそれぞれ処理する場合は、前者+elseという書き方をする。
0928デフォルトの名無しさん
2014/12/27(土) 13:55:38.06ID:BFg2jdzp俺はネストが嫌いなので後者、例えば
if(NULL == (p = malloc(…)))
goto ERR;
if(NULL == (fp = fopen(…)))
goto ERR;
…; // 処理
ERR:;
if(fp) { fclose(fp); fp = NULL; }
if(p) { free(p); p = NULL; }
みたいに goto 使う
0929デフォルトの名無しさん
2014/12/27(土) 14:04:08.01ID:Cc0RXd7d0930デフォルトの名無しさん
2014/12/27(土) 14:05:26.34ID:w8NvplaU0931デフォルトの名無しさん
2014/12/27(土) 15:01:59.23ID:ixHwaiS6if文 自体を無くす知恵を働かせろ
0932デフォルトの名無しさん
2014/12/27(土) 15:10:19.33ID:E3T7edZMif(a && b && (・・・)){
目的の処理
}
って書くと読みずらいって言われるの?
0933デフォルトの名無しさん
2014/12/27(土) 15:29:54.00ID:ixHwaiS6分岐は甘え
0934デフォルトの名無しさん
2014/12/27(土) 16:54:13.21ID:Pwz5s1xQC言語でエラー処理でもするなら別だが
0935デフォルトの名無しさん
2014/12/27(土) 17:49:35.38ID:PS8qPAggどうみても >>928 はエラー処理な訳だが
0936デフォルトの名無しさん
2014/12/27(土) 19:02:31.13ID:NUsNeTE6if (!a) return; // ここで戻るとエラー
目的の処理 // 正しい処理
return; // 正しい終了
if (a) {
目的の処理 // 正しい処理
return; // 正しい終了
}
特別な場合の処理
return; // エラーではなく、正しいが、ここに来るのはまれなケース
0937デフォルトの名無しさん
2014/12/27(土) 21:27:56.41ID:u+dBZrZsMISRA-C 2004 ルール14.7 で、
関数の出口は、関数の最後に一つのみとする
出口が複数だと、制御フローが中断され、読み手が混乱する。
また修正時、各出口に修正しなければならない場合もある
0938デフォルトの名無しさん
2014/12/27(土) 22:21:05.60ID:xmcSSpEW本当に読み手のことを考えるなら、それは読み手が決めることだから勝手に決めるなよーと思うけどな。
0939デフォルトの名無しさん
2014/12/27(土) 22:30:28.48ID:mX32OpPY0940デフォルトの名無しさん
2014/12/27(土) 22:31:21.97ID:fbt+AslfC++にまで持ってきたら許さん。
0941デフォルトの名無しさん
2014/12/27(土) 22:32:20.60ID:w8NvplaUチェック部分に掛かると処理がちょろっとで終わっちゃうって場合に
最後までネスト追わないと「処理がない」ことが分からないのは却って読みづらいよ
中途半端な位置の return は読みにくいとは思うが、先頭はむしろ欲しい
0942デフォルトの名無しさん
2014/12/27(土) 23:44:23.62ID:7SjtB6Lq0943デフォルトの名無しさん
2014/12/27(土) 23:55:24.50ID:xmcSSpEWそれなら大企業が自分たち用にルール作ればいいんじゃね?って思うけど
大企業の(お偉いさんが)作るルールだと的外れな可能性もあるのかね
まぁ自分たちでルール作って守らせるより天才にルール作ってもらったほうが説得力はあるのかもしれないが
>>942
果たしてバカがルールを守ってくれるのだろうか・・・
0944デフォルトの名無しさん
2014/12/28(日) 00:20:50.01ID:YvmGoXLm個別にルール作ったってどうせノウハウは同じだし
MISRA-Cを基準にルール増減させてることはあるけど(何が増減してるか明確にしてる)
守れてなきゃ受け入れテスト不合格で納品できないから嫌でも守らざるを得ない
0945デフォルトの名無しさん
2014/12/28(日) 00:37:09.43ID:/YZxn3dBコーディングルール + 静的チェックが必須
ルールを守らない場合は、ルールからの逸脱手続きが必要。
また個人で勝手に判断して、逸脱してはいけない
これをしないと、すぐに人が死ぬから、MISRA-Cができた
0946デフォルトの名無しさん
2014/12/28(日) 07:21:54.00ID:27cHdU7j正 これをしないと、バカが人を殺すから、MISRA-Cができた
0947デフォルトの名無しさん
2014/12/28(日) 11:00:33.24ID:I/+kANbX>中途半端な位置の return は読みにくいとは思うが、先頭はむしろ欲しい
関数の先頭付近で、受け取った引数の有効性をチェックして無効ならすぐにreturnでお引き取り願う
というケースとか得るよね
returnが関数最後に一カ所でgotoの使用がダメなら、処理無効フラグでも設けて途中をスキップさせることになるのかな
0949デフォルトの名無しさん
2014/12/28(日) 15:32:44.25ID:27cHdU7j0951デフォルトの名無しさん
2014/12/28(日) 19:45:13.15ID:AQDitcxrあくまでもポカ避けだよ
0952デフォルトの名無しさん
2014/12/28(日) 20:39:26.11ID:tSKpZ2So0953デフォルトの名無しさん
2014/12/28(日) 20:42:42.51ID:SJYHrnZmあまり強調されていないようだがlongjmp が飛べる setjump には制限があってどこでもではない云々かんぬん
>>952
確認した、LISP1.5 ですでに例外があったわけだね、感謝する
http://lawker.googlecode.com/svn/fridge/share/pdf/languagesTheory.pdf 3.3章 "exceptions"
0955デフォルトの名無しさん
2014/12/28(日) 21:22:56.70ID:fHqPGp2q0956デフォルトの名無しさん
2014/12/28(日) 21:24:40.05ID:SJYHrnZm22世紀のテクノロジーを20世紀に実現しようとしたんだから制約があって当然(キリッ
0957デフォルトの名無しさん
2014/12/28(日) 21:28:04.38ID:kIpimFnnまあ、無対策であんなもん売り出したらプライバシーもないし、犯罪の温床になるわな
0958デフォルトの名無しさん
2014/12/28(日) 22:23:52.21ID:ea/rzsF3その場所自身に開いている、というのはどうだろうか?
一方は扉を引く、一方は扉を押す、ということになり対称性が崩れる
スライド式の上に巻き上がるか地面にずぶずぶ入っていく形だとうまくいくか?
0959デフォルトの名無しさん
2014/12/28(日) 23:29:25.01ID:a2va3SXhif{
if{}else{}
}else{
}
たぶん、こういう感じで、ネストが深くなるんだろう
0960デフォルトの名無しさん
2014/12/29(月) 00:22:36.25ID:Gl2B1r0m{
if(ptr==NULL) return;
・・・;
}
これなら
{
if(ptr!=NULL)
{
・・・;
}
}
こうなるわけだし。
>>941が言っているのはこういうことだろうね。
{
if(ptr!=NULL)
{
if(a)
{
・・・;
}
・・・; //←ここの存在の有無が分かりにくい
}
}
0961デフォルトの名無しさん
2014/12/29(月) 01:29:39.14ID:w4v+nC+a0962デフォルトの名無しさん
2014/12/29(月) 08:58:29.73ID:GU9lRZUkたしかに「構造的」ではあるんだけどねぇ...
ptr が NULL ならすぐに呼び出し元へ戻る、という単純な流れでも、わざわざ if ブロックの外側を回り込まないとわからないんだよね
「if(ptr==NULL) return;」なら、眺めただけで直感的に理解できる
それならむしろ俺は928氏に同調するな
{
if(ptr==NULL) goto ERR;
・・・;
ERR: ;
return;
}
この処理がスパゲティとは思えないけど、まぁ主観によると言われれば"それまで"か?
0963デフォルトの名無しさん
2014/12/29(月) 09:53:34.43ID:R9uwHG6j> 無効ならすぐにreturnでお引き取り願う
それしちゃいかんと言う話
>>937 辺りから読み直しなよ
0964デフォルトの名無しさん
2014/12/29(月) 10:53:50.17ID:w4v+nC+aMISRA-Cではそうなってるけど、却って分かりにくくね?という話だろ今は
0965デフォルトの名無しさん
2014/12/29(月) 11:27:17.28ID:S6a2iGl8そうだよ。
0966928
2014/12/29(月) 12:09:22.53ID:88bYnTsn>>962
後始末処理が煩雑になるならgoto ERR;、ならないなら即return;でやってます。
0967デフォルトの名無しさん
2014/12/29(月) 12:31:14.75ID:90FPncP0統一した方法が規定されているので
if (hoge) return;
等という事はあり得ないのだよ。
0968デフォルトの名無しさん
2014/12/29(月) 12:40:24.54ID:9Etq4Oht0969デフォルトの名無しさん
2014/12/29(月) 18:15:19.55ID:Gl2B1r0m正常処理した場合でも ERR: ; を通るのがちょっと嫌だなと思う。
昔なんかでgoto は使うなってのがあったと思うんだが、
そのためかgotoは避ける習性がついてる。
自分もifの中が長くなるか、ネストが深くなりそうなら 「if(ptr==NULL) return;」 って返しちゃうけど。
>>963
>>925あたりから読み直しなよw
>>968
goto の仕業です
0970デフォルトの名無しさん
2014/12/30(火) 11:43:34.75ID:oELHqRa9参考になる書籍やサイトを教えて下さい。
0971デフォルトの名無しさん
2014/12/30(火) 15:30:14.23ID:4OrPIxQI一応、WindowsであればWin32APIを使えばいいし、
他のOSならその環境で提供されて居るライブラリを使えば可能です
でも、絵を描く系のアプリは、描画ライブラリが標準で提供されている言語
を使った方がよろしいかと
0972デフォルトの名無しさん
2014/12/30(火) 16:57:21.27ID:oELHqRa90973デフォルトの名無しさん
2014/12/31(水) 10:03:42.26ID:BzIgpzQuswitch使ってreturnが複数あるのはいかんのかえ
0974デフォルトの名無しさん
2014/12/31(水) 21:22:22.92ID:JDflDXLg0975デフォルトの名無しさん
2014/12/31(水) 21:23:15.11ID:MAv4eoG40976デフォルトの名無しさん
2014/12/31(水) 21:36:55.32ID:sJPMMaomこれからは、カッコマンと名乗りなさい
0977デフォルトの名無しさん
2015/01/01(木) 18:44:24.90ID:5u2mylLc調べてみても使い方しか見つかりませんでした
中身が気になって年も越せません、どなたかお願いします
0978デフォルトの名無しさん
2015/01/01(木) 18:48:22.95ID:AdVpW5lB0979デフォルトの名無しさん
2015/01/01(木) 20:40:47.43ID:kAzVMxFU年越してんだろ
glibc
0980デフォルトの名無しさん
2015/01/01(木) 21:06:51.24ID:3W20v7ol0981デフォルトの名無しさん
2015/01/02(金) 07:53:25.54ID:Kr2J2p4W// 但し、xが負の場合などのケアはしてないw
0982デフォルトの名無しさん
2015/01/02(金) 08:54:44.09ID:7UbCEqjnhttps://sourceware.org/git/?p=glibc.git;a=blob;f=math/w_pow.c
https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/ieee754/dbl-64/e_pow.c
0983デフォルトの名無しさん
2015/01/02(金) 20:27:25.41ID:bUqHV81T0984デフォルトの名無しさん
2015/01/02(金) 20:39:22.13ID:olFjF83rゆっくりと読んでみます
ありがとうございました
0985デフォルトの名無しさん
2015/01/02(金) 23:04:31.55ID:wsXrG2FF基本は>981だよ。それに負数の時の処理などが付け加えられて>982のようになっている。
0986デフォルトの名無しさん
2015/01/03(土) 17:10:20.99ID:KCWAqhUR上のサイトの開発手順を参考にして画像処理を行えるプログラムを書きたいのですが、
サンプルソースプログラムのどこをどのように変えればいいのか、
そもそも何から始めればいいのかすら分からず困っています
もし何か分かる方いたら教えて下さるとありがたいです
0987デフォルトの名無しさん
2015/01/03(土) 17:14:14.23ID:Cj8CgFQvちゃんとわかる人に教えてもらえ
0988デフォルトの名無しさん
2015/01/03(土) 17:15:47.86ID:KCWAqhURどこで聞けばいいですかね?
分かる人がいる場所が分からなくて困ってます……
0989デフォルトの名無しさん
2015/01/03(土) 17:53:09.91ID:evDYmhLz書かれていることが分からないなら
書かれていることを理解する勉強から始めればいいと思うよ。
0990デフォルトの名無しさん
2015/01/03(土) 17:56:11.07ID:zYvZyTAZhttp://ja.stackoverflow.com/
0991デフォルトの名無しさん
2015/01/03(土) 18:05:12.55ID:KCWAqhUR了解です!
>>990
ここで聞けば良い感じですかね
ありがとうございます!
0992デフォルトの名無しさん
2015/01/04(日) 00:38:53.48ID:Wz/5DFfoLinuxでは、goto ERR;で関数の最後に、
エラー処理をまとめる。
Linusもそれを推奨している
0993デフォルトの名無しさん
2015/01/04(日) 01:31:27.96ID:EO5g9rYsによると
「Linux デバイスドライバ」(Alessandro Rubini 著、O'Reilly ジャパン刊)
で推奨されているみたいだね。
デバドラとかカーネルとか書く人はアセンブラにも通じていて
goto(jump)には抵抗ないのだろう
0994デフォルトの名無しさん
2015/01/04(日) 10:51:52.71ID:YFWQwx9h使い方次第で、分かりやすいプログラムにも、分かりにくいプログラムにも、どちらにもなる、ということを理解できないんだろう
K&Rですら、gotoの有効な例をあげて、慎重に使えば問題ない、という姿勢だったとおもう
0995デフォルトの名無しさん
2015/01/04(日) 11:10:52.14ID:EjbbMTMU> K&Rですら、gotoの有効な例をあげて、慎重に使えば問題ない、という姿勢だったとおもう
当たり前だろ、常に有効でないと思ってたなら、goto 文実装してないだろ
0996デフォルトの名無しさん
2015/01/04(日) 18:33:37.63ID:jxWL1hkjその使い方に問題があったりするから、
gotoばかり使うスパゲッティとか
そういうコードを排除しようと誰かが提唱する
それを聞いた誰かがすばらしいと崇拝して
おそらく最初に提唱した人の意図とは違う意図で他の人らに広める
MISRA-Cだって慎重にすれば問題ないものでも、慎重に使えない人がいるからそういうルールを作るわけだろ
まぁそういう禁止事項はお仕事ならば慎重さよりスピード重視だろうし
スピード重視した結果スパゲッティになることを防ぐ目的もあるだろう
0997デフォルトの名無しさん
2015/01/04(日) 22:31:04.11ID:AZoVKcHR基底クラスのコンストラクタによって生成されるメンバを
継承したクラスで使うことは可能でしょうか。
例:
class A{
int a; // このaはAのコンストラクタで設定される
A( HOGE Data); // あるデータによってaの値が変わる
}
class B : public A{
B( A A::a ); // Aのメンバをコンストラクタで使いたい
}
よろしくお願いします。
0998デフォルトの名無しさん
2015/01/04(日) 22:34:28.49ID:AZoVKcHR0999デフォルトの名無しさん
2015/01/04(日) 22:47:01.26ID:kU4tFNpUこういうのならば出来そう‥
http://codepad.org/mWOdu8b7
1000デフォルトの名無しさん
2015/01/04(日) 22:47:16.34ID:jxWL1hkj10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。