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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2014/05/13(火) 01:12:47.46ID:BZ1B9xOm
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
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/g
< `∀´>ニダー
0003デフォルトの名無しさん2014/05/13(火) 18:18:10.74ID:A9K77IIM
さんだーぼるとー
0004デフォルトの名無しさん2014/05/14(水) 05:50:20.23ID:Xzsp2rfd
CでUnixコマンドと同じ機能を持ったプログラムを作りたいんですけど
何か良い解説が載ってある本かサイトはないでしょうか?
0005デフォルトの名無しさん2014/05/14(水) 08:15:17.76ID:+P9aBJqU
該当するUnixコマンドのGnu実装のソース読めば?
Cで書かれてるの多いし。
0006デフォルトの名無しさん2014/05/14(水) 11:48:07.31ID:mJzoB0fa
system();関数でコールするとかw
0007デフォルトの名無しさん2014/05/14(水) 18:42:46.24ID:Nzt71bWa
C++11ではnullptrというものが追加されたそうですが
null_ptrではないのには何か理由があるのですか?
どうでもよいことですが気になってしまいます
0008デフォルトの名無しさん2014/05/14(水) 20:16:13.60ID:2QlwcCvG
タイプする文字数が少ない
0009デフォルトの名無しさん2014/05/15(木) 18:22:05.94ID:5sMFAW9N
素直に null にしとけっちゅうねん
0010デフォルトの名無しさん2014/05/16(金) 15:43:55.66ID:vCeiEc1O
ポインタは全て動的っで
最終的に解放が必ず必要って解釈して良い?
動的じゃないポインタってある?
0011デフォルトの名無しさん2014/05/16(金) 16:14:28.33ID:wig+3ePF
ある。
int a;
int *p = &a;
0012デフォルトの名無しさん2014/05/16(金) 16:16:44.29ID:WW/l1jAv
ポインタは宇宙なので単一に矮小化してとらえることはできない
001372014/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/l1jAv
HSP総合スレ【part 7】
http://toro.2ch.net/test/read.cgi/tech/1393282298/l50
0016デフォルトの名無しさん2014/05/16(金) 20:43:46.63ID:wig+3ePF
>>14
C言語とHSPを混同するな
0017デフォルトの名無しさん2014/05/16(金) 22:48:00.00ID:TJX0UH9b
分母が0かどうかを判定するのに==0で等値比較をするのは、
==0でtrueでにならない限り計算ではエラーにならないと思うので
問題ないですよね?
0018デフォルトの名無しさん2014/05/16(金) 23:01:56.31ID:ZLut8i0j
>>17
型が double で、非常に小さな値のときに、
==0 は false だけど、演算結果が無限大になることはあるけど大丈夫?
0019デフォルトの名無しさん2014/05/17(土) 00:16:34.85ID:V4dexxPJ
プログラムとあんまり関係ないけど、
シミュレーションプログラムでの命名について
アイデアください

時間を無次元化したら
stepって単位にするのが一般的だと思うけど
長さを無次元化したら
なんて名前にしたらいいと思う?
0020デフォルトの名無しさん2014/05/17(土) 00:21:01.02ID:R4olBPWV
>>19
それぞれtとlでええんとちゃう?
lが嫌ならmとかで
0021デフォルトの名無しさん2014/05/17(土) 00:21:24.12ID:YyEzaSn4
hex
0022デフォルトの名無しさん2014/05/17(土) 22:48:54.63ID:Twx7r9t2
無次元と無名数は違うんじゃないだろうか?
0023デフォルトの名無しさん2014/05/17(土) 23:35:50.73ID:jvmVGTrf
かなり初歩的な質問でごめんなさい。
vectorに配列型を指定した場合の挙動が分からなくて困っています。

正確には
std::vector< double[2] > vec1;
みたいなコードを書いたんですが、これはやってはいけないコードなのでしょうか?
push_backやresizeを呼ぼうとするとどうやってもエラーで進まないです。引数有りコンストラクタも呼べません。

素直に
vector<double> vec1[2];
とやるべきなのでしょうか?
また、テンプレートに配列型を指定できないのはvector特有の性質なのでしょうか?
0024デフォルトの名無しさん2014/05/17(土) 23:50:44.42ID:R4olBPWV
>>23
<>を使うってことは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
>>24
ありがとうございます
template自体が配列使っちゃいけないんですか
現在newを使ってるんですが、ソースの書き換えができない段階に来ており
添え字の問題を解決するために結局operator[]を定義したクラスを作ることにしました
0026デフォルトの名無しさん2014/05/18(日) 03:51:33.54ID:nSMECTwp
最近C++の勉強を始めました。開発にVisualStudio2008を使っています。
普段はJavaを使用しており、開発環境もEclipseを使っているのですが
どうにもVisualStudioの使い方が判らず困っています。

VisualStudioの設定や便利な使い方を学ぶのにお勧めのWebサイトや書籍などありませんか?
0027デフォルトの名無しさん2014/05/18(日) 04:28:14.54ID:+bye9+6c
Visual Studioのスレがあるじゃないか
なぜここで訊く
0028デフォルトの名無しさん2014/05/18(日) 08:22:30.19ID:Uw9b9LOt
つまり、そもそもヘルプやドキュメントの検索ができない(これはスレタイトルの検索が
できなかった時点で確定している事実)のだから、机を並べて事細かにアドバイスして
くれるような人間がいない状況で新しいものに手を出すのは無謀なレベルの人間>>26
0029デフォルトの名無しさん2014/05/18(日) 10:17:46.15ID:cA8A9s6T
>>23
良く分からんけど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+s7
Cで実体にはconstありの引数を持った関数のプロトタイプ宣言の引数に
constを付けても付けなくても違反でないのですが、どちらがよいのでしょうか?
0031デフォルトの名無しさん2014/05/18(日) 15:18:49.21ID:MO8Dtd0g
linux環境下でc言語を用いて動画を再生する方法は無いでしょうか?
x11ウィンドウ内に表示したいです
0032デフォルトの名無しさん2014/05/18(日) 16:00:30.80ID:P2EXL/Ge
>>30
なぜconstを付けるのかということを考えると
プロトタイプ宣言に付けないと価値が半減する
0033デフォルトの名無しさん2014/05/18(日) 16:16:35.52ID:oqaXJcpo
>>29
arrayのことは知りませんでした。その方がずっと簡単にできますね。

こちらの状況は、これまで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/dn
>>31
system("vlc moviefile.mp4");
0035デフォルトの名無しさん2014/05/18(日) 17:10:22.13ID:DIHfwpMS
>>3
それだったらスマポに入れればいいぞ
もっと簡単になる

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:FaLSmftQ
試せば?
0039デフォルトの名無しさん2014/05/19(月) 22:38:02.91ID:mLyDgbnZ
>>35
このスマポという奴を使う場合
ud[n][2]の2のほうも変数にする方法は有りますか?
0040デフォルトの名無しさん2014/05/19(月) 23:04:05.15ID:Yfo7RAeE
>>39
constexpr int を使えば行ける
但し行毎に列の長さを変えるような使い方は出来ない
そういう時はvectorを使う
0041デフォルトの名無しさん2014/05/19(月) 23:45:45.38ID:Bw7LBrUS
c言語を学びたいとおもうんですが開発環境でつまずいてしまっています
パソコンに入っている microsoft visual studio professonal 2013
でc言語を入力したいと思っているのですがなかなかうまくいきません
どうすればいいですか?
あとおすすめのc言語開発環境などがあったらおしえてほしいです
0042デフォルトの名無しさん2014/05/20(火) 00:02:52.05ID:mxK7K6eG
>>41
>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
constexpr size_t の方がいいかな・・・
でも64bit環境でそんな大きな配列使わないよね・・・
0044デフォルトの名無しさん2014/05/20(火) 00:11:29.08ID:KXJMtxo4
>>41
素の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
>>44
それ同じこと既に言ってるんだけど

……いっそこれ使った方が楽ちんな気がする(中身はTiny C Compiler)
http://9cguide.appspot.com/p_9cide.html
0046デフォルトの名無しさん2014/05/20(火) 00:21:02.90ID:KXJMtxo4
>>45
全部が全部同じじゃないし、投稿時間だって10分も違わないし、レスが被るくらいでみみっちいこと言うなよ
0047デフォルトの名無しさん2014/05/20(火) 01:14:46.12ID:2A54L/7+
constexpr知らない人がいるから一応書いておくか

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:OAGGaPxS
デリータをラムダにしたらいかんのけ
0049デフォルトの名無しさん2014/05/20(火) 06:55:45.27ID:HULE9c20
ディリータがラムザだって?
0050デフォルトの名無しさん2014/05/20(火) 10:31:47.12ID:jnRMRVPU
>>48
無理じゃ

http://d.hatena.ne.jp/nagoya313/20100305/1267758837

std::shared_ptrならカスタムデリータにラムダ式を使えるが、std::unique_ptrはダメ
0051デフォルトの名無しさん2014/05/20(火) 12:34:49.57ID:UR0HXhEB
>>50
autoに代入してからなら入るはずだけど
0052デフォルトの名無しさん2014/05/20(火) 14:37:47.10ID:U8Xj8N/D
auto mydeleter2 = [](double (*p)[m]){ std::cout << "delete double*[" << m << "]" << std::endl; delete[] p; };
std::unique_ptr<double [][m], decltype(mydeleter2)> ud(new double[n][m], mydeleter2);

こんなのか
変態過ぎるwww
0053デフォルトの名無しさん2014/05/20(火) 15:32:16.32ID:PibgqYJG
A *a, *b;
a = new A;
b=a;
delete a;
a=new A;
b!=a
という保証なんてどこにもないですよね?
0054デフォルトの名無しさん2014/05/20(火) 17:05:17.57ID:mSiEAm6Z
一度開放した領域が再度割り当てられることはないという保証なら、ありませんね。
0055デフォルトの名無しさん2014/05/20(火) 17:06:36.99ID:y0AQP6Vn
え?
0056デフォルトの名無しさん2014/05/20(火) 18:38:43.12ID:KXJMtxo4
delete a;を一行後ろに回さない限り、b!=aもb==aもありうる。
0057デフォルトの名無しさん2014/05/20(火) 20:58:24.17ID:eMXV5lE3
派生クラスのデストラクタには
とりあえず virtual つけとけば問題ない?
0058デフォルトの名無しさん2014/05/20(火) 21:10:48.34ID:fbMM1sIr
基底クラスの方に付けろ
0059デフォルトの名無しさん2014/05/20(火) 21:17:17.03ID:XZ8PbsoH
>>57
基底クラスの方じゃないかい?
0060572014/05/21(水) 21:12:40.05ID:Rtlj0b94
間違えた
基底クラスのデストラクタには
とりあえず virtual つけとけば問題ない?

あと、派生クラスのデストラクタに
virtual つけとくとなにか問題ある?
0061デフォルトの名無しさん2014/05/21(水) 23:10:48.52ID:QpxSOORZ
基底クラスのデストラクタにvirtual付けないと基底クラスのデストラクタが呼ばれずメモリリークする
派生クラスのデストラクタは基底クラスのデストラクタにvirtualが付いている場合デフォルトでvirtualと
みなされる

http://www32.ocn.ne.jp/~ons/text/CPP0xFAQ.html.ja

ここら辺読んでよ

finalつけるとどうなるんだっけ?コンパイルエラー?警告だけ?やってみればいい話だけど
0062デフォルトの名無しさん2014/05/22(木) 00:58:34.82ID:ZWGxuBLk
>>61
×基底クラスのデストラクタが呼ばれず
○派生クラスのデストラクタが呼ばれず
あと、それが起きるのは基底クラスにキャストした状態でdeleteした場合などで、
デストラクタが呼ばれない事が問題だから起きるのはメモリリークだけじゃない。
ハンドルがリークする場合もあれば終了処理が行われない場合もある。

だったはず。
0063デフォルトの名無しさん2014/05/22(木) 08:14:19.27ID:B1HhBS7N
http://cpplover.blogspot.jp/2011/05/c0xfinaloverride.html?m=1
0064602014/05/22(木) 20:57:36.89ID:m4yPgbOU
ぶっちゃけ
クラスのデストラクタ全てにvirtualつけとけば
問題なくない?
0065デフォルトの名無しさん2014/05/22(木) 21:14:59.60ID:2g4glAhM
>>64「パフォーマンスは投げ捨てるもの」
0066デフォルトの名無しさん2014/05/22(木) 22:10:33.87ID:5c02VcX7
C++にてSwitch文を使った相性占いプログラムのソースを書いてほしいです

まず最初に二人の情報(5桁の数字ID、生年月日)入力をして、
そこから演算を行い、占い結果を表示するプログラムのソースを書いていただけないでしょうか

演算方法は何でもいいですし、結果は何通りでもいいです
簡単なものでも全然構いませんので、お願いしますm(_ _)m
0067デフォルトの名無しさん2014/05/22(木) 22:18:23.05ID:33euSJkO
>>66
占い結果で分岐するのをswitch使ってって事でいいのか
0068デフォルトの名無しさん2014/05/22(木) 22:21:18.26ID:2g4glAhM
>>66
何もかも丸投げしてんじゃねーよw
せめてIDと生年月日から占う部分だけでも作れ
(もちろんコード化できるぐらいキッチリ仕様をまとめること)
0069デフォルトの名無しさん2014/05/22(木) 22:22:03.03ID:5c02VcX7
>>67
そうです><
0070デフォルトの名無しさん2014/05/22(木) 22:37:32.88ID:33euSJkO
>>69
switch(占い結果){
結果1:
printf("結果1です");
break;
結果2:
printf("結果2です");
break;
}
0071デフォルトの名無しさん2014/05/22(木) 22:59:28.62ID:2g4glAhM
とりあえず>>66の要望に沿ったものを作ってみた。
流石に入力部分ぐらいstd::cin使えば楽勝だろうから、
サンプルデータとしては適当な人物のものを使っている。
http://codepad.org/Fx7dtDlo
0072デフォルトの名無しさん2014/05/22(木) 23:11:03.08ID:5c02VcX7
>>71
まさか答えてくださるとは……涙が出てきました、本当にありがとうございます!!!TT
まだ何もかも初心者で分からないですがあなたのような人を目指して勉強がんばっていきたいですっ!
0073デフォルトの名無しさん2014/05/22(木) 23:16:16.25ID:2g4glAhM
>>72
入門書片手にゆっくり学んでいけばいいんじゃないかな

「C++で」と書いてあったからワザとclassとかfriend関数とか使ったけど、
本来なら小細工無しでmain関数だけでも書ける内容だしね……
流石にやりすぎた感が否めない(^_^;)
(そもそも剰余取るならswitch使わず最初からstd::stringの配列として
結果を用意した方が良いと思うけど)
0074デフォルトの名無しさん2014/05/24(土) 05:35:02.60ID:LVEVeP19
libcurl
つかってhttp get をしてみたら
デバックプリントで
OK
と表示されるのですが、このデバック表示を消すにはどうすればいいのでしょうか
http://curl.haxx.se/libcurl/c/simple.html
0075デフォルトの名無しさん2014/05/24(土) 10:58:45.01ID:NSCx1NVk
デバッグプリントだとわかっているならデバッグモードをやめればいいんじゃないかな?
0076デフォルトの名無しさん2014/05/24(土) 20:55:01.22ID:jba60f72
vector<string> myVect;
にいろんな文字列を代入したとして、その中から、
string keyWord ="ABC";
で始まっている要素だけを取り出して、新たなvector<string>を
作りたいのですが、どう書けばよいでしょうか?
0077デフォルトの名無しさん2014/05/24(土) 21:02:24.98ID:BoH7rvjb
>>76
やっつけだけどこんなのでいいのか?

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:cV3HOdor
vector<string> words;
for (auto& str : myVect) {
if (str.find(keyWord)==0) words.push_back(str);
}
0079デフォルトの名無しさん2014/05/24(土) 21:46:37.05ID:jba60f72
>>77,78
ありがとうございます!!
無事動きました。C++勉強中なので大変勉強になりました。
関連してもう一つ教えてください。
教えていただいた方法を、vectorに対して、
vector<string> result = myVect.startWith("ABC");
みたいに自分でstartWith()というメソッドを作りたいのですがC++では
そういうことが出来るのではないかと思っているのですが、
どういうキーワードでググればよいでしょうか?
0080片山博文MZ悪魔崇拝 ◆T6xkBnTXz7B0 2014/05/24(土) 22:16:43.35ID:cV3HOdor
それは簡単にはできない。次のように派生クラスを作れば何とかできる。

class 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
>>80
サンプルありがとうございます。
これを参考に作ってみます。
>それは簡単にはできない。
簡単には出来ないということですが、何か難しい手法を使うと実現できるのでしょうか?
C#だと既存のクラスに拡張メソッドを追加できたので、C++でも出来るのではと思ったのですが。
0082デフォルトの名無しさん2014/05/25(日) 11:24:05.95ID:CXANs0iQ
>>81
C#でできることが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:JrQwFRNG
#include<stdio.h>#include<string.h>#include<stdlib.h>
void 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
そんなわけのわからないのはどうでもいい。
まともに見れるやつに書きなおしたら動くだろ。
0086 ◆QZaw55cn4c 2014/05/25(日) 11:50:15.35ID:NeNyrW9A
>>84
何をやりたいのかよくわからないので形式的な点だけを指摘するのだが

>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
if( pp == NULL )
じゃないのか
*ppに何入ってるかなんてわからんだろ
0089デフォルトの名無しさん2014/05/25(日) 12:16:15.52ID:mGonMRxn
>>84をとりあえず清書してみる
http://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
codepadいいですね
もうお騒がせしたくないのですが
レベル上がってまともな議論できるようになったらまた来ます
0092デフォルトの名無しさん2014/05/25(日) 12:22:00.93ID:JrQwFRNG
visualC++はミスを勝手に補っていたと認識すればいいのかな
0093デフォルトの名無しさん2014/05/25(日) 12:24:16.59ID:EMg57a+q
たまたま確保したメモリが0クリアされてただけでしょ
0094デフォルトの名無しさん2014/05/25(日) 12:52:26.41ID:2Bb1jnf+
>>76
regexとか
0095デフォルトの名無しさん2014/05/25(日) 12:58:54.95ID:2XYWcL+D
>>92
修正前と修正後レスしたらわかるんじゃないかな
0096デフォルトの名無しさん2014/05/25(日) 13:14:26.31ID:vrjD7GQR
この手のやつは Debugでは動いたけど Releaseでは動かないというよくある罠
0097デフォルトの名無しさん2014/05/25(日) 15:20:30.86ID:VdGWzfNy
>>84
やりたいのはこういうこと?
http://ideone.com/x2YbQK
0098デフォルトの名無しさん2014/05/25(日) 18:15:23.75ID:JrQwFRNG
>>97 secretで見れませんね
0099デフォルトの名無しさん2014/05/25(日) 18:52:04.50ID:VdGWzfNy
>>98
http://codepad.org/cRoDAq0S
をideoneに貼ったつもりだった。

ideoneのコードがなぜか消えている。。
0100デフォルトの名無しさん2014/05/25(日) 19:18:05.82ID:JrQwFRNG
>>99 29行目 hoge[i]は&つけないといけないと思う
0101デフォルトの名無しさん2014/05/25(日) 22:28:26.35ID:VdGWzfNy
いや、つけてはいけません。
0102デフォルトの名無しさん2014/05/25(日) 22:38:14.80ID:JrQwFRNG
ああ pp宣言*1個になってるし意図が伝わってなかった
ポインタ型の動的配列を作りたかったんです
ポインタの配列なら*p[定数]で済むのに...
0103デフォルトの名無しさん2014/05/26(月) 00:14:02.77ID:1AGAnN0M
>>102
> ポインタ型の動的配列を作りたかったんです

なるほど。では>>99はあなたの「やりたいこと」とは違いましたね。失礼
0104デフォルトの名無しさん2014/05/26(月) 03:02:25.50ID:8DsryLB1
これこのまんまじゃ期待してる動作してないんじゃないの
結果的に出力が同じになってるだけで、おそらくやらせたいだろうことはしてないぞ
0105デフォルトの名無しさん2014/05/26(月) 03:27:06.87ID:8DsryLB1
いや、mainのhoge変数の各要素のポインタが欲しいだけならこれでいいのか
一部期待した動作をしてないであろう箇所があるってのが正しかったな

今のままだと>>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:UJEeKjCa
まちがいさがし
http://codepad.org/hGzuz6di
0107デフォルトの名無しさん2014/05/26(月) 03:42:29.23ID:8DsryLB1
>>106
これ見て思ったけどfor文++iじゃなくてi++にするべきだったわすまん
突然書く人変わってるって疑われるわ
0108デフォルトの名無しさん2014/05/26(月) 03:45:34.13ID:Pt2kiZ/o
ぶっちゃけfor文の中のは大差無いらしいけど俺は前置派>インクリメント
0109デフォルトの名無しさん2014/05/26(月) 03:48:06.77ID:8DsryLB1
>>108
今どきのコンパイラならどうせどっちで書いたって最適化してくれるんじゃねって思うしな
0110デフォルトの名無しさん2014/05/26(月) 05:14:13.42ID:UJEeKjCa
Cが来た時にC++になるから後ろに置きたい
0111デフォルトの名無しさん2014/05/26(月) 07:04:07.96ID:FZT5gfTQ
C++ では後置インクリメントは悪の根源並に嫌われるが
0112デフォルトの名無しさん2014/05/26(月) 07:14:41.63ID:fNjo4Ias
前置にしろ後置にしろ
1行にそれしか書かないようにしてる
0113デフォルトの名無しさん2014/05/26(月) 10:44:45.62ID:jXHZxPTV
>>111
ポインタとかでない限り問題なかろう
0114デフォルトの名無しさん2014/05/26(月) 12:33:31.87ID:LnM16LwK
>>113
クラスだと、前置インクリメントオペレータしか作らないことが多い。
後置だとコピーしないといけないからね。
0115デフォルトの名無しさん2014/05/26(月) 16:08:00.12ID:4UfKpyVP
後置インクリメントは副作用でかいよ
0116デフォルトの名無しさん2014/05/26(月) 19:31:29.48ID:BEet9unM
助けてください
pathfileexistsを使ってサーバーの共有フォルダ内のファイルの存在をチェックしているんですが、
自分のPCだと問題なくファイルを確認できるのに、ほかのPCに持っていくと
ファイルは存在しているのにfalseが返ってきてしまいます…
パスワードもないしエクスプローラから問題なく見えるのですが何が原因分かりませんか?
0117デフォルトの名無しさん2014/05/26(月) 20:15:22.36ID:fNjo4Ias
シェルから辿ってみれば
0118デフォルトの名無しさん2014/05/26(月) 21:15:31.18ID:yHJImmyi
当然GetLastErrorは見たのか
0119デフォルトの名無しさん2014/05/27(火) 08:10:02.80ID:VBK+BNJs
>>115
副作用がでかい?
用語はちゃんと理解した方がいいぞ。
0120デフォルトの名無しさん2014/05/27(火) 08:41:05.45ID:zuChiLjA
>>119
最近聞きかじって使いたくなったんだろ。
0121デフォルトの名無しさん2014/05/28(水) 01:39:04.87ID:1069+ikW
static変数をメンバーに持つクラスって
そのクラスを生成しなくても
そのstatic変数はプログラム実行時に生成されるの?
0122642014/05/28(水) 01:45:41.29ID:1069+ikW
>>65
どういうこと?
詳しく説明してほしい
0123デフォルトの名無しさん2014/05/28(水) 01:54:43.56ID:m/PVkgzF
FileInfo fi = new FileInfo("ファイルのパス");
fi.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:KYfVKk6v
>>123
http://dobon.net/vb/dotnet/file/writefile.html
0125デフォルトの名無しさん2014/05/28(水) 02:10:40.08ID:a7wYHcWS
>>122
virtualつけると関数コール時に仮想関数テーブル参照することになって遅くなるしインスタンスのサイズも少しでかくなる
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
>>121
定義した時だね
struct A { static int a; }
なら
int A::a;
とかで定義するのでグローバル変数と同じ扱い
0127デフォルトの名無しさん2014/05/28(水) 02:24:40.32ID:7s/YdHrO
>>121
Java ならクラスのstatic な変数は実行時に "自動的に" に生成されるが
C++ はクラス定義とは別にプログラマが自分で実体を定義してやらねばならない = >>126
0128デフォルトの名無しさん2014/05/28(水) 03:31:40.55ID:1yf3kB3k
>>122
移転のあおりで消えたレス
> >>65
> vtbl参照するポインタ一つとdeleteする時の参照コストは増えるけど…
> ポインタ一つのメモリ量気にする場所でクラス使うなやって感じだし、
> パフォーマンス気にする処理の中でnew/delete連発もしちゃ駄目でしょ。

>>125
仮想関数テーブルを経由するのはvirtual付いてるメソッドだけだから、
デストラクタだけに付けててそれが乱発されるって設計の時点でパフォーマンスは投げ捨て済み。
あと仮想関数テーブルは同一クラスのインスタンス間で共有してたりするから、
その場合インスタンスあたりのメモリ消費の増加はポインタ1個とかのオーダになる。
これが問題になるケースというのもやはりその時点でパフォーマンスは投げ捨て終わってると思う。
0129デフォルトの名無しさん2014/05/28(水) 04:29:03.02ID:a7wYHcWS
>>128
数千単位のデストラクタ呼び出しを毎フレーム乱発することなんてまずないけど
数千を何セットか確保した結果の数万をあるタイミングで一気に解放するってケースは稀ではあるもののなくはないと思うが
そういう時にvirtualしてなきゃ速度をずいぶん改善できることはあるだろ。まあ大抵そもそもテンプレートでの実装とか代替案がでるとは思うが
あと大きくなるってのはまさにそのポインタ1個分だからな。これも圧迫されうるのは積もり積もったときだけで数百程度だったら気にするだけ無駄だが
0130デフォルトの名無しさん2014/05/28(水) 04:43:24.82ID:1yf3kB3k
>>129
何処でロスが出るか完全に制御してクラス使う人は「デストラクタ全てvirtual」なんて選択肢は端から無いだろうし、
数万単位の情報を速度重視で扱うなんて状況で1個1個クラスにして欲しくねぇわ…ってのは贅沢な願いなのかな?
0131デフォルトの名無しさん2014/05/28(水) 08:37:08.02ID:m/PVkgzF
>>124
それは試しました。
ユニティ上ではエラーなくビルドできるのですが、
StreamWriter sw の部分で何故かこけてしまいます。

ファイルのパスなどは、UTF-8でちゃんと動いているので問題ないかと思ってます。

>>125
確認しました、ご明察のとおり、C++ ではなく C# のようです。
あと、ユニティとアンドロイドで開発してます。

FileInfo をなぜ使っているのか解らないのですが、
124 の方も教えてくれたサンプル通りにやっても実機で動きませんでした。


C# なら、別のスレッドに質問した方がいいですか?
0132デフォルトの名無しさん2014/05/28(水) 08:50:12.08ID:1yf3kB3k
C++/CLIですらこのスレでいいのか迷うレベルなのにC#をここで良いかって聞かれてもな…
0133デフォルトの名無しさん2014/05/28(水) 10:25:12.68ID:a7wYHcWS
>>130
それだから>>65だろ
0134デフォルトの名無しさん2014/05/28(水) 10:38:41.31ID:36F+cvJj
shared_ptrに入れとけばデストラクタがついてるかついてないかなんて関係なくなる
0135デフォルトの名無しさん2014/05/28(水) 13:15:04.06ID:mspF09G9
>>131
JavaかVBスレの方がまだマシ
0136デフォルトの名無しさん2014/05/29(木) 07:59:14.44ID:82BFXyhl
#pragma once
ってヘッダーの先頭に一回書くだけでいいんですよね?
下に示すような書き方しているのを見たことがあります。
何か意味があるのでしょうか?

-----あるヘッダファイル-----------
#pragma once
class A{
  ...
};
#pragma once

class B{
  ...
};
#pragma once

class C{
  ...
};
#pragma once
...
0137デフォルトの名無しさん2014/05/29(木) 07:59:44.46ID:QaxywJR9
ただのアホ
0138デフォルトの名無しさん2014/05/29(木) 10:44:05.16ID:GJ6Azonc
バラバラのファイルを連結しただけならギリギリセーフ
0139デフォルトの名無しさん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:QaxywJR9
付けるのは多態性を使うクラスだけで十分
0142デフォルトの名無しさん2014/05/29(木) 13:14:28.94ID:hGrR3Csk
無駄につけると遅くなるから嫌われる
個人製作に限るならあえて止める理由はない
0143デフォルトの名無しさん2014/05/29(木) 14:35:59.19ID:GJ6Azonc
嫌われるけど、デストラクタをvirtualにして明らかに遅くなるようなケースはあんまりない気が
それで遅くなるような状態ならどうせそれ以外にも遅くなる要因が山ほどあるだろうし
01441212014/05/29(木) 15:52:06.88ID:zblOCN9G
static変数をメンバーに持つクラスを解放したら
static変数でも解放されて使えなくなるよね?
0145デフォルトの名無しさん2014/05/29(木) 16:01:21.88ID:EFZu1tJU
クラスの解放って?
0146デフォルトの名無しさん2014/05/29(木) 16:12:04.91ID:hGrR3Csk
>>126 を受けてなおそんな世迷言を
0147デフォルトの名無しさん2014/05/29(木) 16:55:56.41ID:ZPfW7Hu7
staticメンバーのコンストラクタはプログラム開始時に呼ばれる。
staticメンバーのデストラクタはプログラム終了時にatexitみたいな仕掛けで呼ばれる。
01481212014/05/29(木) 18:00:10.69ID:zblOCN9G
class Ctest
{
public:
static int abc;
};


このCtestを動的に生成した場合
変数 abc は static だからグローバルになり
生成したCtestが解放された時に abc も解放されて使えなくなる?
0149デフォルトの名無しさん2014/05/29(木) 18:52:26.84ID:zEmhoXcP
んなわけない
abcはCtestのインスタンスと無関係
0150デフォルトの名無しさん2014/05/29(木) 22:26:40.17ID:lsho9ypK
使えなくなったらstaticにした意味ないしね・_・
0151デフォルトの名無しさん2014/05/30(金) 00:38:38.09ID:iU8Ve7Yv
>>148
つ>>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:p0YChy7B
超初心者の質問で申し訳ありません。
forを使って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+78
簡単にオーバーフローしそうな計算式だな
0155デフォルトの名無しさん2014/05/30(金) 14:52:39.25ID:tQtZpcuA
>>152
http://ideone.com/Elx3J3
01561482014/05/30(金) 15:37:30.61ID:9ztPnSR9
///// test.h /////

class Ctest
{
public:
static int abc;
};

///// test.cpp /////

int Ctest::abc = 100;


staticメンバーの変数はこういうことで
Ctestクラスの生成、解放関係なしに
プロプラム実行時から終了時までグローバルで使えるってことでOK?
0157デフォルトの名無しさん2014/05/30(金) 16:32:06.84ID:lPnoVdIE
ただのグローバル変数と同じ
0158デフォルトの名無しさん2014/05/30(金) 18:23:18.60ID:VP4sRqxG
スコープはあるだろ
0159デフォルトの名無しさん2014/05/30(金) 21:38:27.59ID:I46UGUDy
static変数abcがあるのにそのクラスをdeleteした場合
new Ctest
delete Ctest
ここでどうやって使うん
0160デフォルトの名無しさん2014/05/30(金) 21:43:22.93ID:BLHBUUhB
日本語でおk
0161デフォルトの名無しさん2014/05/30(金) 21:44:38.26ID:2FpmCful
Ctest::abc
0162デフォルトの名無しさん2014/05/30(金) 22:20:18.99ID:I46UGUDy
deleteした後にどうやって使うん
Ctestはもう死んでるやん?
0163デフォルトの名無しさん2014/05/30(金) 22:27:13.46ID:BLHBUUhB
static変数はインスタンスと無関係だと言っただろ
0164デフォルトの名無しさん2014/05/31(土) 06:08:17.29ID:DtdLdmhz
多分クラスとインスタンスの区別が付いてない人だろう
0165デフォルトの名無しさん2014/05/31(土) 15:40:42.88ID:6LzyMI+6
>delete Ctest
0166デフォルトの名無しさん2014/05/31(土) 16:06:10.51ID:A8nmKroG
特定の時間にタスクを実行したのですが
無限ループの中に何か処理を入れるようなものを作るのでしょうか
0167デフォルトの名無しさん2014/05/31(土) 17:21:00.95ID:Udt15ViO
>>166
日本語でOK。
環境も合わせて書いとくれ。
0168デフォルトの名無しさん2014/05/31(土) 17:43:02.08ID:zlcjKUg4
>>166
タスクって言い方からすると組込か
0169デフォルトの名無しさん2014/05/31(土) 17:53:59.88ID:WaVhhm58
C#かもしれん
0170デフォルトの名無しさん2014/05/31(土) 17:59:10.71ID:A8nmKroG
設定した時間で実行する処理を作りたいのですが、そういうものを作ったことがありません。

C++MFCのプログラムで無限ループしているところがあります。

ここに時間が来たかどうかの判断を入れるのが普通なのかどうなのかと思いまして
0171デフォルトの名無しさん2014/05/31(土) 18:27:46.99ID:6LzyMI+6
つ タスクスケジューラ
0172デフォルトの名無しさん2014/05/31(土) 18:41:44.06ID:zlcjKUg4
ある時刻なのか
ある時間経過後なのか
0173デフォルトの名無しさん2014/05/31(土) 19:00:40.55ID:A8nmKroG
毎日23:30に実行したいです。

WINAPIのCreateWaitableTimerを使うという記事をネットで見つけましたが
これは使っていいんでしょうか
0174デフォルトの名無しさん2014/05/31(土) 20:25:19.56ID:odnG7Cix
>>171 でいいよ
0175デフォルトの名無しさん2014/05/31(土) 20:39:16.31ID:WaVhhm58
>>173
夏時間はどうする?
0176デフォルトの名無しさん2014/05/31(土) 20:52:34.96ID:TLo1GTQA
なんとなくわかりました
スレッド立てて指定時間まで待機
指定時間を過ぎたら実行
終了時に次の実行時間を指定ですね
0177デフォルトの名無しさん2014/05/31(土) 22:53:07.90ID:Km8CFKFD
>ls
a.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
>>179
その例だと、「計算して」の題意を満たしていないな。
せめて、こんなもんだろ。
--
#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
diff -uN c.txt.org c.txt >x.patch
たぶんできたわ
0182デフォルトの名無しさん2014/06/01(日) 20:21:39.15ID:EoOyig9q
Makefile で、
%.o : %.cpp
(rule)
のように汎用的に書いておき、ある特定のソースコードはコンパイルオプションを変えたい場合
Makefileはどのように書けば良いでしょうか?
上記の記述に加えて、そのソースコードのコンパイルルールを加えただけだと無視されてしまいました。
0183デフォルトの名無しさん2014/06/01(日) 23:25:25.96ID:NTS0Pzbx
VC++6.0 で作成したDLLの中身のソースをデバッグしたいんですが、
上手くいきません。

DLLの中の関数呼び出し自体は別プロジェクトでmain作ってDLLインポートして・・
で、出来るんですが。呼び出し先のソースを見れません。何か良い方法は
ないでしょうか?
0184デフォルトの名無しさん2014/06/01(日) 23:31:47.86ID:gjlX7ty8
DLLのプロジェクトにデバッグ用メインを登録して、DLLのプロジェクトをRunするです。
0185デフォルトの名無しさん2014/06/01(日) 23:32:16.49ID:+IEDdSur
どううまくいかないのか
0186デフォルトの名無しさん2014/06/01(日) 23:35:11.99ID:+IEDdSur
main側で目的のファイルを開いてブレークポイント設定(開くだけでプロジェクトへ追加は必要無い)
→mainでデバッグ開始
→mainでLoadLibrary
→DLLの関数を呼び出す
→ブレークポイントで止まる

どこまでやってどうなるのか
0187デフォルトの名無しさん2014/06/01(日) 23:37:26.91ID:NTS0Pzbx
>> 184 とりあえずそれで試してみます。どうもありがとうございました(__)

>> 185 DLL内部のソースをSTEP実行できないんです。
0188デフォルトの名無しさん2014/06/01(日) 23:51:02.96ID:Vdytlm3J
DLLソースの検索先パスを登録する設定があったはず
0189デフォルトの名無しさん2014/06/02(月) 22:59:40.91ID:9EWfIjsq
EXEプロジェクトからでもデバッグできるけどソースパスの問題とかあるので、DLLプロジェクト側から親EXEを指定してデバッグするのが王道
01901562014/06/09(月) 01:16:03.43ID:YH45DqQS
>>156に書いたように
staticメンバーはCtestの生成、解放関係なしにグローバルで使えて
static以外のメンバーは、普段通りCtestを生成すると使える
ってことで良いんだよね?
0191デフォルトの名無しさん2014/06/09(月) 14:31:57.02ID:CV1N0NlN
テンプレートのファンクタの動的なバージョンが
std::functionという理解であってますか?
0192デフォルトの名無しさん2014/06/09(月) 22:14:19.25ID:2baEZhQu
>>190
「グローバルで使える」ってのが微妙だが、その通りです
記憶クラス的に

>>191
ちょっと捉え方が間違ってるような

テンプレートで指定した戻り値、シグネチャで呼び
出せるのものであれば、なんでも入れられるのがfunction
静的な関数、関数オブジェクトが該当する

ラムダもコンパイル時に関数オブジェクトを生成ので同じように使える
インスタンス関数の場合、mem_fn+bindで、関数オブジェクト化、
インスタンスへの参照固定で入れられる
0193デフォルトの名無しさん2014/06/09(月) 22:48:16.12ID:2baEZhQu
Cで型の問題は厄介だよね
これがあるから安全で生産性も高くなるんだろうけど、
ちょっとでも違えば許してもらえない

たとえばObserverパターンとかで、コールバックを登録したいとする
ここでも型が問題になる
functionは型を消してしまえるんだな
ただし若干、オーバーヘッドがある

単純に関数に渡すファンクタが必要なのであれば、ラムダで
書いた方がよい
高速です
0194デフォルトの名無しさん2014/06/10(火) 18:33:14.20ID:ExSiC/cX
複数のファイルが圧縮されているZIPファイルを解凍せずに、
その中身の特定のファイルを指定して読み出したり、あるいは、
その特定のファイルを上書きしてZIPファイルを書き換えたり
したいのですが、どうすれば出来ますか?
0195デフォルトの名無しさん2014/06/10(火) 18:38:38.30ID:hzZkSFog
そういうプログラムを書けばできるんじゃないですか
0196デフォルトの名無しさん2014/06/10(火) 20:09:14.96ID:nP1d3r8O
1/2000000と1/1999999を区別比較できるような型はありませんよね 実装案とかいただけませんか?
D/T(1<=T<=2百万,1<=D<=100)を何個か比較演算したいです
0197デフォルトの名無しさん2014/06/10(火) 20:43:52.27ID:Q6yCJgce
有理数型を作りゃいいじゃん
0198デフォルトの名無しさん2014/06/10(火) 20:59:52.84ID:p3jSqJSc
>>196
文字列なら簡単だ。
0199デフォルトの名無しさん2014/06/10(火) 21:03:49.73ID:hzZkSFog
std::ratioとか
0200デフォルトの名無しさん2014/06/10(火) 21:14:10.96ID:nP1d3r8O
>>197-199 ありがとうございます! >>199が手軽でよさそうですね
0201デフォルトの名無しさん2014/06/10(火) 23:00:55.72ID:nP1d3r8O
先程よりもレベルの低い質問なのですがratio配列は作れるのでしょうか
0202デフォルトの名無しさん2014/06/10(火) 23:06:04.53ID:hzZkSFog
boost::rationalなら
0203デフォルトの名無しさん2014/06/10(火) 23:11:03.68ID:nP1d3r8O
あー残念ながらboostは使えない環境なのです 前もって書き忘れてました
0204デフォルトの名無しさん2014/06/10(火) 23:15:13.67ID:j8iOZPUp
>>203
自分で作りなよ、ゆー
0205デフォルトの名無しさん2014/06/12(木) 19:54:09.97ID:ZrIHv0PN
>>197 >>204 気長に作ってみますありがとうございます

http://codepad.org/ZTZs3nU4
POJなんですけど このコードがg++だと通ってc++だとコンパイルエラーでます
g++ってどんな補完あるんでしょうか
0206デフォルトの名無しさん2014/06/13(金) 23:22:35.20ID:OcgplV8Y
>>205 解決しました ありがとうございます
sqrt()の中身int型整数を少数型にキャストしなければならないようで
0207デフォルトの名無しさん2014/06/14(土) 00:31:06.98ID:bcTe5xiu
わからない、、オブジェクト指向とクラスがわからない、、、、
例えば、、、四角形を親とするクラスがあってその子どもが長方形と台形を持つとします。
四角形
メンバ変数
上辺、下辺、左辺、右辺、角度
機能
面積計算
周りの長さ計算
対角線を計算
台形のメンバ変数、高さ:長方形のメンバ変数なし、機能:面積計算
台形のコンストラクタで四角形
のメンバ変数を初期化?する、四角形の機能で計算、、四角形で辺だけをreturnする関数
を作り、台形の面積計算に必要な辺をうけとる
その後また長方形のコンストラクタで四角形を初期化?
こんな感じの考え方でよいのでしょうか、、、

もう自分で書いてて意味わからないのですが、エスパーの方教えてください。
もしくは四角形継承台形長方形、長方形の継承正方形のプログラムを教えてください。


main
で

コンストラクタで
長方形(double 辺、double 辺、、、):四角形(辺、辺){}
といった書き方でよいのでしょうか
0208デフォルトの名無しさん2014/06/14(土) 10:28:53.72ID:h7hlzhCn
>>206
>少数型
そんなもの(二重の意味で)ない。
0209デフォルトの名無しさん2014/06/14(土) 10:46:35.46ID:ghLFWdur
>>208 私の拙い頭では 二重のというのが理解しかねます 浮動小数点型等言葉の定義の問題でしょうか
0210デフォルトの名無しさん2014/06/14(土) 12:04:18.29ID:vn/Wi9/b
固定小数点ってのがあるから浮動を省略しちゃいかんのと
少と小

この二点じゃないかなぁたぶん
0211デフォルトの名無しさん2014/06/14(土) 12:47:48.04ID:9xl6N+lz
>>208
クラスはCの構造体に次の二つの性質を追加した新しいデータ型
・ メンバー変数のアクセス制御できる
・ メンバーとして変数の他に関数も持つことが出来る
基本、メンバー変数はメソッド(関数)を通じてのみアクセスして、呼び出し側が意識する必要がないように
するのがオブジェクト指向…というかカプセル化かな?

基底クラス(親クラス)をベースにして、メンバー変数・関数を追加して新しいクラス(子クラス)を定義するのが継承

四角形・台形の比喩は‥ ごめん、わからん
0212デフォルトの名無しさん2014/06/14(土) 12:52:23.31ID:7sAVuJQO
>>207
図形なら、まずは、大きさと描画関数だけあればいいんじゃね
オブジェクトをどう利用したいのかによって、完成形は異なるんだから、
まずは「拡張できる」ように作ることを考える

ゲームを想定して、図形がキャラクタだと思って全体を構成してみたら?

なお、オブジェクト指向なんて、その方が使いやすい場面で使えば十分だ
無理に教科書的な例から学ばなくても、現実ではよく出会う
0213デフォルトの名無しさん2014/06/14(土) 13:18:44.42ID:9xl6N+lz
継承の例

たとえば、すべての【人間】に共通で、最低限の情報は「名前」「年齢」「性別」くらい?かな
これらをメンバー変数に、変数をR/Wする関数をメンバー関数として(人間)クラスが定義できますよね

新しく【学生】を定義する必要があるとして
一から作ってもいいけど、せっかく(人間)クラスがあるんだから、これに必要な情報(変数)やメソッド(関数)を追加してやれば手抜きできると‥
(人間)クラスに、たとえば「学校名」「学部」「学科」「学年」「学位」を示す変数と、これらにR/Wするメンバー関数を追加してやれば
(学生)クラスが定義できるわけです
【学生】も【人間】だから、人間の属性を継承するということ

わかりにくかったらすまん
0214デフォルトの名無しさん2014/06/14(土) 13:28:08.28ID:BuWNtkHZ
>>213
人間クラス専用のファイルがあったとする
人間クラスに学生情報を追加した学生クラスにしたとする

別の機会に人間クラスに人種情報を追加して人種クラスを作成する必要が出たとする
この時既に人間クラスは学生クラスに置き換わってる

こんな衝突を経験して頭がおかしくなる
0215デフォルトの名無しさん2014/06/14(土) 13:31:24.42ID:RWrtwXRC
>>208
SQL-Server の smallint 型とか (w
0216デフォルトの名無しさん2014/06/14(土) 13:57:40.90ID:hFdfnZbt
学生とか犬猫とかでオブジェクト指向を分かった気になってはいけない(戒め)
0217デフォルトの名無しさん2014/06/15(日) 00:26:42.99ID:T2fwcVku
>>210 誤字気づきませんでしたthx
0218デフォルトの名無しさん2014/06/16(月) 15:25:13.12ID:kM7IOeM2
char a[4] = "ABC";
char *b = a;

プログラムの一部に↑というのがありました。
先頭のアドレスを*bに代入?とよく分からなかったのですが、

char *b;
b=a;

としても同じ結果になって、省略できるのかな?と思いました。

他のサイトでは、
char *b="ABC";みたいな記述もあったような。

char *b;
b="ABC";
で、文字列の先頭のアドレスをbに代入してるということでしょうか?
0219デフォルトの名無しさん2014/06/16(月) 15:30:51.00ID:H3LgDS+r
char *b = a;と

char *b;
b = a;はやってる事は一緒

char *b = "ABC";はできるが

char *b;
b = "ABC";はできない
0220デフォルトの名無しさん2014/06/16(月) 15:36:17.89ID:kM7IOeM2
>>219
ありがとうございます。
今書いてて、エラーは出ずに実行できたのですが、
書式は間違ってる(サポートされてない)ということでしょうか。

#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
http://homepage1.nifty.com/toshio-k/prog/c/string.html
ちなみにここでした。
>char *s;
>s = "ABC";
一応サポートはされているんですかね。
0222デフォルトの名無しさん2014/06/16(月) 15:48:06.37ID:wXHrgiMz
>>220-221
もうやめて、>>219のライフはゼロよ
0223デフォルトの名無しさん2014/06/16(月) 21:22:50.87ID:9t16BPS6
>>207
もうおらんかな?
エスパーでない初学者ですが、自分の練習も兼ねて書いてみました。
メンバ変数を辺で持ったり、対角線を求めるのは出来なかったので
頂点座標を使って面積と周囲長だけ適当に書いてます。
http://codepad.org/mykX2VDE
余計かもだけど親クラスを四角形クラスにしない場合も貼っときます。
http://codepad.org/lm2cxeEM
これだと座標データは派生クラスで持つ必要があるけど、丸や三角形でも
扱えるから使い方によっては楽かも。
0224デフォルトの名無しさん2014/06/16(月) 23:07:32.01ID:FBqd5r20
>>223
なるほど、ありがとうございます
0225デフォルトの名無しさん2014/06/16(月) 23:24:56.12ID:FBqd5r20
>>223
なるほど、ありがとうございます

仮想関数について
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:x7Tm4gn4
>>225
virtual関数をメンバーに持つクラスは、仮想テーブルが作られる
virtual関数と同型と見なせる関数を派生クラスで定義するのが、オーバーライド

オブジェクトは、new した方の型だから、test[1] は SUPER
ポインタや参照経由で TEST クラスへのアクセスする場合、
仮想テーブルを辿って本来の型SUPERの関数を呼び出すようになっている
0227デフォルトの名無しさん2014/06/17(火) 02:48:13.60ID:jLYVWX8U
>>225
コメントは基底クラス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:v9u3KVJs
super と test のネーミングが真逆だよ‥
http://codepad.org/I8IPVZCh
02292272014/06/17(火) 08:50:38.31ID:jLYVWX8U
>>228
あ、ほんとだ。言われるまで気づきませんでした。
ありがとうごさいます。
0230デフォルトの名無しさん2014/06/17(火) 17:18:19.72ID:zLfMxzQt
printf("%*s", 3 * (i - 1) + 5, "");

参考書に↑のようなprintf文が載ってました
%*sってどういう意味ですか?
また、3 * (i - 1) + 5で計算してる理由って何ですか?
iはint型変数です
0231デフォルトの名無しさん2014/06/17(火) 17:35:18.74ID:LnB6vTqT
iが1とする
3 * (1 - 1) + 5 = 5
printf("%5s", "");になる

*に計算結果が入る
0232デフォルトの名無しさん2014/06/17(火) 17:45:36.12ID:zLfMxzQt
ありがとうございます
理解できました
0233デフォルトの名無しさん2014/06/17(火) 22:10:15.29ID:uAI2OXqB
MSXMLが使いこなせません><
IXMLDOMDocument2Ptr で 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
×__uuidof(DOMDocument60)
○MSXML::CLSID_DOMDocument
0235デフォルトの名無しさん2014/06/17(火) 23:47:33.92ID:ZnAix8mp
GCC 4.4.7

#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
c++初心者です。
読んで勉強になる、ライブラリ以外のソースコードが知りたいのですが、何かオススメはあるでしょうか?
できれば比較的最近のもので、コンパクトだとありがたいです。
0237デフォルトの名無しさん2014/06/18(水) 02:50:39.05ID:OD7nApX3
>>234
コンパイルエラーで弾かれてしまいます…

>エラー 1 error C2039: 'CLSID_DOMDocument' : 'MSXML' のメンバーではありません。 d:\cloud\bp\xmltest\xmltest\xmltest.cpp 37 1 xmltest
0238デフォルトの名無しさん2014/06/18(水) 12:33:25.00ID:/jpL5mxU
目から鱗
ttp://faithandbrave.hateblo.jp/entry/2014/06/16/155156
0239デフォルトの名無しさん2014/06/18(水) 14:40:05.21ID:2sj5eCvL
C#とC++を両方やっていると、やっぱりC#のほうが、
作業効率が良いように感じるんですが、みなさんどうですか?
0240デフォルトの名無しさん2014/06/18(水) 16:19:47.82ID:LAmx7968
>>238
面白いけど、実務では
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
>>238
その鱗ははめたままにしておきなされ
0242デフォルトの名無しさん2014/06/18(水) 18:12:14.70ID:EaENCaWf
multi_arrayはbool型に使えますか?
0243デフォルトの名無しさん2014/06/18(水) 22:51:57.76ID:b95ka0Af
よくC++はCの上位互換て書いてあるけど、たまにCの方が使いやすいって言うけど結局どっち?
0244デフォルトの名無しさん2014/06/18(水) 22:54:18.49ID:pJdwjV3r
慣れ
0245デフォルトの名無しさん2014/06/18(水) 23:03:22.67ID:cO7v6OhK
Cのやり方でやるならCの方が使い易い
C++のやり方でやるならC++の方が使い易い
0246デフォルトの名無しさん2014/06/18(水) 23:07:29.00ID:Uko284+o
>>243
上位互換だからって使いやすいとは限らないだろ?
0247デフォルトの名無しさん2014/06/19(木) 07:57:19.73ID:s8Zw40ia
今から勉強するやつはCやんないでC++やればいいの?
0248デフォルトの名無しさん2014/06/19(木) 08:13:27.08ID:nGqFEu9y
>>247
C++言語の設計者は、C++をシステム言語(OS、共通ライブラリなど)向けとして作ったと言ってる。
つまりそれ以外の用途だと、Cより苦労する。
まあ大抵の個人・組織は何故かシステムレベルの車輪の再発明からやってるんで、Cを使って更に苦労する訳だが。
0249デフォルトの名無しさん2014/06/19(木) 10:06:54.74ID:uVoak4lN
すみません
CはC++のサブセットだと思ってました
規格の改訂世代にもよるかと思いますが、C++にはなくてCに存在する仕様(機能)って例えば何がありましたっけ?
0250デフォルトの名無しさん2014/06/19(木) 12:51:00.94ID:gmSqBbFa
可変長配列。
0251デフォルトの名無しさん2014/06/19(木) 14:15:33.09ID:uVoak4lN
なるほど。std::vectorよりも簡単そうですよね。
0252デフォルトの名無しさん2014/06/19(木) 16:30:13.57ID:ANGbOwOf
ゲームだとC++で組んでもC++的な機能は使われないな
0253デフォルトの名無しさん2014/06/19(木) 17:24:03.27ID:SJ+Smgsh
多態性とか使うだろ?
0254デフォルトの名無しさん2014/06/19(木) 17:33:00.68ID:Brdb8B0I
登場キャラをclassで実装すると固有/共有の属性の扱いがとてもラクになると思うが
0255デフォルトの名無しさん2014/06/21(土) 15:34:10.84ID:KMvjaKi+
>>239
ちょっとしたものなら C# の方が楽と感じるけど、それなりの規模だとあまり変わらないかな
0256デフォルトの名無しさん2014/06/21(土) 16:50:10.62ID:+tlHdBiN
>>253-254
そんな、凝ったの書かしてもらってない。そう言えば自分のではC++機能使いまくりだった
0257デフォルトの名無しさん2014/06/22(日) 03:46:49.39ID:n/T6EZNW
それなりの規模だとコンパイルが遅いんじゃクソボケェ・・・ってなるんじゃないの
0258デフォルトの名無しさん2014/06/22(日) 12:07:54.36ID:fKkjonsJ
ぴんぴんぷるぷるぴんぷるぷる
テンプレートは遅いね・_・
0259デフォルトの名無しさん2014/06/28(土) 12:52:17.26ID:Z5Hu91SB
thisの値はオブジェクトが作られて無くなるまで変わりませんよね?
0260デフォルトの名無しさん2014/06/28(土) 23:53:51.23ID:E/3TLq27
>>259
変わらない
0261デフォルトの名無しさん2014/06/29(日) 08:55:20.94ID:KFRMJvcV
>>259
変わらないシステムが圧倒的に多いだろうね。
但し、変わった事でプログラムの動作に支障が出るようなら、それはプログラムの
作りがおかしいという事である。
0262デフォルトの名無しさん2014/06/29(日) 12:23:59.35ID:XFCViuqu
ありがとうございます
0263デフォルトの名無しさん2014/06/29(日) 12:38:08.93ID:K5dqtKQ7
マルチだとどっちに解答すりゃいいんだか
0264デフォルトの名無しさん2014/06/29(日) 12:51:05.82ID:KFRMJvcV
>>263
全部に
マルチすんな!ヴォケ!
とレスするのが2chの作法、K&Rに書いてある。
0265デフォルトの名無しさん2014/06/29(日) 12:56:09.95ID:d4tnsDO5
>>261
> 変わらないシステムが圧倒的に多いだろうね。

変わるシステムなんてあるの?
そのオブジェクト参照されてる場合、勝手に変わられると困ると思うが。
0266デフォルトの名無しさん2014/06/29(日) 13:20:20.11ID:XFCViuqu
変わるとマジで困るんで、
変わらない証拠おしえてください。
0267デフォルトの名無しさん2014/06/29(日) 13:49:04.09ID:kMofjRV8
>>266
文脈では仕様の話なんだが?
0268デフォルトの名無しさん2014/06/29(日) 14:10:16.72ID:XFCViuqu
仕様として変わってもいいという風にC++の仕様書には書いてあるということか?
0269デフォルトの名無しさん2014/06/29(日) 21:44:12.38ID:vXcDBpcb
マジレスして損した。
0270デフォルトの名無しさん2014/06/29(日) 22:32:21.70ID:KFRMJvcV
>>265
winのAPIにもあるGlobalLockやGlobalUnlockは、そういう用途に使ってたよ。
今はheapを使うのが普通だけど別にオブジェクトをここに作る事が絶対禁止な
訳じゃない、まあオブジェクトの参照をどう保持するかの問題だな。

システムというかCPUが不自由だとメモリの仮想化が不十分でプログラムが
「実行中に何度も別のアドレスに勝手にリロケートされる」なんてことも起こり
得たんだよ。
0271デフォルトの名無しさん2014/06/29(日) 22:44:24.39ID:Hir1ALDw
GCを使うと、thisも変わるんじゃね?
0272デフォルトの名無しさん2014/06/30(月) 07:16:38.00ID:RRSpyW++
>>270
GlobalAlloc とかのだとアクセスはメモリーハンドル使う訳で、普通の heap と違うでしょ?
そんなもんどや顔で出されても困るわ (w
0273デフォルトの名無しさん2014/06/30(月) 16:39:38.34ID:OoeeUvmn
顔が見えるのか
0274デフォルトの名無しさん2014/06/30(月) 19:51:06.53ID:K5zrSJWB
>>272
君は理解の仕方が中途半端だね。
> アクセスはメモリーハンドル使う
真っ赤な嘘を広めてはいけない。
アクセスする為のポインタを得る為にメモリーハンドルを使うんだ。
君のようにメモリーハンドルでアクセスしたら例外で吹っ飛ぶよ?
0275デフォルトの名無しさん2014/06/30(月) 20:32:11.67ID:S8arh0g0
>>274
そんな当たり前の事を知らないなかとでも言うように説明する人が居るとはな
0276デフォルトの名無しさん2014/06/30(月) 21:32:07.01ID:K5zrSJWB
よかったな、一つ賢くなったじゃないか
0277デフォルトの名無しさん2014/07/01(火) 02:31:23.23ID:aHhEQ2XO
>>1
VS2010で int が long int と同じになってた。
0278デフォルトの名無しさん2014/07/01(火) 07:13:49.59ID:uMb52dFR
>>274
ハンドルとポインタの区別もつかんのか (w
0279デフォルトの名無しさん2014/07/03(木) 23:02:29.48ID:2beLGnBn
最近、プログラマの仕事ってマーシャリングばっかりだな…
そうでないのは力仕事だし

(ネイティブに限る)コンパイラって何なんだろうって思う
0280デフォルトの名無しさん2014/07/08(火) 21:18:40.46ID:JvR/NBCs
C言語からC++にステップアップしようかと思うんだけど
最新のC++11まで含めて浅くでいいから広範囲に扱ってるサイトとかないかな
0281デフォルトの名無しさん2014/07/08(火) 23:26:58.23ID:KPHElX/P
>>280
cplusplus.com
0282デフォルトの名無しさん2014/07/09(水) 03:19:15.41ID:oP2kEIS8
>>281
ありがとう。一瞬躊躇してしまったが比較的平易な英語で書かれていて
これなら翻訳サイトと併せてなんとか読めそうなのでがんばってみる
0283デフォルトの名無しさん2014/07/09(水) 08:23:29.93ID:QPl72qxT
いちいち翻訳通すくらいなら日本語のリファレンス本買った方がいいよ
英語サイトへ行くのはその次だ
0284デフォルトの名無しさん2014/07/09(水) 14:41:27.65ID:eczUeSs+
全角文字のアルファベットをtoupper()したいのですが、
標準関数でそういうの無いですか?
0285デフォルトの名無しさん2014/07/09(水) 15:30:20.52ID:aj4O2jpl
>>284
先ず始めにお聞きしたいのですが、お使いの言語は何でしょうか。
Cでしたら、ありません。
0286デフォルトの名無しさん2014/07/09(水) 16:32:23.48ID:sSBu2vKy
>>282-283
つttps://sites.google.com/site/cpprefjp/
0287デフォルトの名無しさん2014/07/09(水) 21:05:24.47ID:lRyDFvzO
CでS-JISなら
http://www.ncad.co.jp/~komata/c-kouza23.htm
などを参考にしてみるとか
0288デフォルトの名無しさん2014/07/09(水) 21:56:20.52ID:75kwCoC7
http://codepad.org/JuKVmyrc
このコードを3つに分けてコンパイルすると メンバ関数未定義とコンパイルエラーでます
ggった通りにインクルードしてると思うのですがなにを間違えているのでしょうか
アドバイス頂けませんか
0289デフォルトの名無しさん2014/07/09(水) 22:08:53.21ID:nVe34nkn
rational.cppがリンクされてないんだろう
使ってるコンパイラとエラーの内容がないから何とも言えん
0290デフォルトの名無しさん2014/07/09(水) 23:12:26.78ID:75kwCoC7
>>289 リンクを頼りにggったら出てきましたありがとうございます
結構な時間ggってるのに見つけられない情弱さ嫌になるね
0291デフォルトの名無しさん2014/07/10(木) 14:11:27.79ID:YR8w5b7e
string array[] = { "abc", "edfg", "AB" };
みたいに初期値を代入した配列の要素数3を
求める方法ありますか?
0292デフォルトの名無しさん2014/07/10(木) 14:47:40.07ID:+wVx4yYh
>>291

sizeof(array) / sizeof(* array)
0293デフォルトの名無しさん2014/07/10(木) 14:53:22.59ID:YR8w5b7e
>292
ありがとうございました。
0294デフォルトの名無しさん2014/07/10(木) 16:28:49.65ID:TeSkcnCY
_countof()
0295デフォルトの名無しさん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:m5S9HQxE
それだと
dbgprintf("%d", func());
が
("%d", func());
になってしまう
0297デフォルトの名無しさん2014/07/12(土) 22:59:07.97ID:wXyVo6GR
条件 ? 真の時 : 偽の時
0298デフォルトの名無しさん2014/07/12(土) 22:59:49.53ID:wXyVo6GR
くあしくはサンコン演算子かなんかでggrks
0299デフォルトの名無しさん2014/07/12(土) 23:14:44.12ID:MTjCae/M
Visual Studioならビルドも実行も問題なくできるですが。
0300デフォルトの名無しさん2014/07/12(土) 23:57:52.87ID:NSx3oKmy
その例だとfunc()が呼ばれちゃうだろ。それも含めて、無害化したいんだろ。
0301デフォルトの名無しさん2014/07/13(日) 00:04:12.05ID:SsDCNXiH
visual studio だと、これで行けるんですが。何でかな?
#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+GMLz
ifdefの切り方のが気になる
0303デフォルトの名無しさん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:G9QhDNfC
だからfunc()が呼ばれるって言ってるだろ。
0305デフォルトの名無しさん2014/07/13(日) 00:09:06.82ID:b0K+GMLz
>>303
define展開後のソースをベタで書いて動かせばいーじゃない
0306デフォルトの名無しさん2014/07/13(日) 00:11:43.83ID:SsDCNXiH
>>304
なるほど。そうすると、funcの戻り値はどうなるんですか?
("%d", func());
が
("1");
になって、この後どうなるんですか?
0307デフォルトの名無しさん2014/07/13(日) 00:15:05.28ID:SsDCNXiH
>>305
int _tmain(int argc, _TCHAR* argv[]){
  ("1");
  return 0;
}
で動きました。 ("1"); の行は、実行に影響ないんでしょうか?
0308デフォルトの名無しさん2014/07/13(日) 00:29:57.79ID:b0K+GMLz
>>307
ない
voidキャストされる
無駄処理なだけ
0309デフォルトの名無しさん2014/07/13(日) 00:37:10.72ID:G9QhDNfC
そもそもそんな評価されねぇよ。あんた、「人間じゃなくて人だな」って言われない?
どこから"1"が出てくるんだよ、この間抜け。
0310デフォルトの名無しさん2014/07/13(日) 00:43:29.81ID:G76Sa1hj
>>303
はfuncは呼ばれません。
0311名無しさん@0新周年2014/07/13(日) 01:31:07.42ID:nrxOtUVn
int a=(123,func());
0312デフォルトの名無しさん2014/07/13(日) 01:33:03.22ID:7UphRhX9
まず忌まわしきカンマ演算子を知るべき
話はそれからだ
0313デフォルトの名無しさん2014/07/13(日) 02:03:15.70ID:psjBpgTU
for(i=0,j=100;i<5;i++,j-=20)
0314デフォルトの名無しさん2014/07/13(日) 07:29:50.12ID:psjBpgTU
1, 連続した配列を2次元配列のように扱いたいのですがどうすればうまくいきますか?
 今の所は値が書き変わっていません
2, VC++2010EEではコメントのようにキャストしないとエラーになるのですがどこを直せばいいですか?

ttp://ideone.com/2cbjRj
0315デフォルトの名無しさん2014/07/13(日) 08:02:48.70ID:fGnnU/OX
>>314
質問内容とソースとが対応していない、に1票。
0316デフォルトの名無しさん2014/07/13(日) 08:57:51.52ID:0Iul1EJe
1. ideoneの出力を見る限り、1, 2, 3, ...が10, 20, 30, に書き換わっている
2. エラーメッセージを書く。常識
0317デフォルトの名無しさん2014/07/13(日) 10:39:54.60ID:SsDCNXiH
カンマ演算子ググッようやくdbgprintfマクロの挙動わかりました。
有難うございました。
マクロ勉強中で、もう一つ教えてください。こんなマクロ見つけたのですが、
#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:nn2UNRM4
(a)の中身が a + 1 だったりしたらどうする
0319デフォルトの名無しさん2014/07/13(日) 11:04:10.62ID:SsDCNXiH
その時は、例えば
char 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:iBUseW7g
2次元配列の動的確保なんですが、例えば2*3の2次元配列の場合

int **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:psjBpgTU
>>315,316
ideone用に書き換えてる間に直ったのかもしれません
お騒がせしました

>>320
リスト構造?
0322デフォルトの名無しさん2014/07/13(日) 12:11:30.17ID:mc+PMj3L
>>320
�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
>>322
解答ありがとうございます
>>320に書いた確保の仕方は、メモリ領域に連続して確保するためのものでした分かりづらくすみません
なので�Aの後には、
for (i = 1; i < 2; i++) a[ i ] = c[ i-1 ] + 3;
このような処理が入り、全体のサイズを確保した後に、行を割り当てることになります。

おっしゃる通りの行ごとに列のサイズを確保し、メモリ領域が連続になっていない確保の仕方では、
プログラムはエラーをはかずに動作しました。
0324デフォルトの名無しさん2014/07/13(日) 12:25:16.99ID:iBUseW7g
>>323
×c[i-1]
○a[i-1]

でした
0325デフォルトの名無しさん2014/07/13(日) 15:40:25.69ID:7UphRhX9
>>317
多分ほんのちょっぴりでも高速化したいんだろ
普通のコーディングならそもそもマクロじゃなく関数にすべき
0326デフォルトの名無しさん2014/07/13(日) 16:16:05.62ID:0Iul1EJe
高速化のつもりだろうね
関数コールのオーバーヘッドがよほど気になる状況でも無い限り、
効果は薄いと思う。>>317 が興味があるなら、短絡評価を調べるといい。
マクロ自体は、strcmpのa,bの方は括弧でくくってないし、なんか中途半端
0327デフォルトの名無しさん2014/07/13(日) 18:34:21.87ID:25pakNK6
strcmpの方はカンマ演算子をオーバーライドしてない限り大丈夫じゃね?
優先順位低いし
0328名無しさん@0新周年2014/07/13(日) 19:38:19.95ID:XpdRKiat
(j-1)[a]
0329デフォルトの名無しさん2014/07/14(月) 03:16:13.60ID:v6rlvCBe
>>317
高速化のつもりだろう。しかし、最近のコンパイラではstrcmpはストリング命令に
インライン展開される(ことが多い)ので、かえって低速化を招く。
0330デフォルトの名無しさん2014/07/14(月) 06:11:18.36ID:PQHLBfsn
gccの最新バージョンではSSE4.2命令まで使ってるよ
-marchオプションで使える時はそちらをリンクするようになっている
0331デフォルトの名無しさん2014/07/14(月) 21:15:27.78ID:QdFaiwl3
IO速くするにはどうすればいい?
バッファリング?
0332デフォルトの名無しさん2014/07/14(月) 21:53:25.57ID:dxRw1V7C
SSDを買う
0333デフォルトの名無しさん2014/07/14(月) 22:52:44.27ID:kVP5lF+/
>>329
最適化という機能があるよ
0334デフォルトの名無しさん2014/07/15(火) 00:07:32.82ID:/VWMpkMO
>>331
なんでもかんでもオンメモリー
0335デフォルトの名無しさん2014/07/15(火) 12:25:59.43ID:zrHbAgn8
繰り返し書き込むファイルの断片化対策
読込量・回数を減らす…インデックスやハッシュの活用
予算が余ってるならRAIDを組む
メモリが余ってるならRAMディスクもあり
0336デフォルトの名無しさん2014/07/15(火) 16:12:20.00ID:eA5jv2Nf
I/Oそのものの高速化は手間なので、データ圧縮し転送時間を減らす。
とか言ってみる
0337デフォルトの名無しさん2014/07/16(水) 09:34:20.91ID:b0IB8P33
リングバッファとセマフォ(2つ)とスレッドを使って先読みする
0338デフォルトの名無しさん2014/07/17(木) 00:36:59.90ID:OBbzwXpO
HDDとか圧縮したまま記録すれば早いんじゃ?
0339デフォルトの名無しさん2014/07/17(木) 01:09:36.88ID:bej3WA57
ZFSというLZ4圧縮を使えるファイルシステムがあってな
0340デフォルトの名無しさん2014/07/17(木) 15:07:58.26ID:STDuRs09
初心者です。
ソースをすっきりさせたいので、
ウィンドウプロシージャとかWinMainとか、
include以外の全部をDLLに投げ込んじゃってもいいんでしょうか?
0341デフォルトの名無しさん2014/07/17(木) 15:17:12.77ID:to24R3x/
なぜDLLに投げ込めばソースがすっきりするんだ?
0342デフォルトの名無しさん2014/07/17(木) 15:46:04.62ID:en/jF64V
ソースファイルを分割するのとごっちゃになっているのではないか
0343デフォルトの名無しさん2014/07/17(木) 17:58:00.24ID:wKNmXy3y
DLLにWinMainは無理だ
鶏が先か卵が先かになってまう
03443402014/07/17(木) 19:43:39.87ID:STDuRs09
ありがとうございました。
0345デフォルトの名無しさん2014/07/18(金) 10:30:44.47ID:vLbu0UtM
C++って何を作るのに優れてるの?ゲーム以外で
0346デフォルトの名無しさん2014/07/18(金) 12:14:53.84ID:exI1hoJs
Web系以外なら何でも
0347デフォルトの名無しさん2014/07/19(土) 00:19:29.13ID:AQ8sn0hT
手軽にパフォーマンスが必要なものを作るのに
0348デフォルトの名無しさん2014/07/20(日) 10:26:23.66ID:ErUz0FQn
作りにくさ・使いにくさに逆に価値が宿ることもある
0349デフォルトの名無しさん2014/07/22(火) 14:33:49.20ID:wIMHt4xr
★2ch勢いランキングサイトリスト★

◎ +ニュース板
・ 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:DTo922cR
Qt方の拡張だ
Qtのチュートリアルなりリファレンスなりに解説あるだろ
0352デフォルトの名無しさん2014/07/26(土) 09:31:02.23ID:1dyiAST7
そのまま private slots でググればいいんじゃね?
>>351 の言うように Qt の拡張みたい
0353デフォルトの名無しさん2014/07/26(土) 09:45:43.76ID:7jJs6tm2
>>351, 352
迅速な回答ありがとうございます!!

拡張でそんなことが出来るものなのですね。驚きました。
知らない言葉の仕様かと思っていました。
private slots でググらせて頂きます。
合わせてチュートリアルも読むことにします(面倒臭がって、サンプルをざっと見て弄りたがったのが身の程知らずでした。)

ありがとうございました。
0354デフォルトの名無しさん2014/07/28(月) 20:40:15.62ID:XrTiyw31
http://codepad.org/ZcK1V5rO

出力
asdf6
jkl;2
361208

sizeofで期待したメモリサイズが帰って来ない 私が知らない知識をお教え願う
0355デフォルトの名無しさん2014/07/28(月) 20:44:14.15ID:dfMBLDBO
>void asmerge_rec(int[], int, int);
引数で[]は使うな
int[]はint*と同じだ
sizeof(ar)したところで配列の大きさは返ってこない
0356デフォルトの名無しさん2014/07/28(月) 23:22:53.84ID:XrTiyw31
>>355 c言語の初心者用サイトで学んで以来
可読性のために配列渡すときは[]を使用していました

今*に書き直して試したところ出力結果変わりませんでした
このsizeof(ar)はなにを返しているのでしょうか
0357デフォルトの名無しさん2014/07/28(月) 23:30:36.36ID:CSMUGygm
sizeof(int*)と同じ
0358デフォルトの名無しさん2014/07/28(月) 23:37:46.60ID:XrTiyw31
>>357 この環境では(?) int*が8バイトでintが4バイト????

wikipediaでヒントらしきもの見つけました
http://ja.m.wikipedia.org/wiki/Sizeof
完全型とかいう概念
0359デフォルトの名無しさん2014/07/28(月) 23:42:27.60ID:nv6YBJ31
>>356
ま、template関数使えば似たような事が出来なくは無いけどね。
0360デフォルトの名無しさん2014/07/28(月) 23:43:07.48ID:XrTiyw31
ありがとうございますおそらく解決しました
不完全型:オブジェクトを規定する型で,その大きさを確保するのに必要な情報が欠けたもの。

stdlibのqsortの引数がややこしいのは同じような理由でしょうね
0361デフォルトの名無しさん2014/07/29(火) 00:42:38.49ID:bQIMdul6
逆に配列宣言したスコープ内の場合 どこにサイズ情報を持ってるのか疑問が沸いた
0362デフォルトの名無しさん2014/07/29(火) 01:06:14.11ID:s+4NszZe
>>361
型情報と一緒にコンパイラが持ってんじゃねぇの
出力されたコード上では定数
C++だとさらに名前の中にマングリングして突っ込む

だけど、引数としての配列って不完全型云々じゃなくて暗黙のうちにポインタに変換されてたりしないか?
Cの仕様書持ってないからそのへんは知らんけど、不完全型へのsizeofならエラーじゃないのかと。
0363デフォルトの名無しさん2014/07/29(火) 02:22:03.19ID:bQIMdul6
>>362 有益な情報ありがとうございます

不完全型については http://www.c-tipsref.com/words/incomplete_type.html
ここにそのものズバリ書いてあったので書きました このページが正しいのかはもう少しggってみます
0364デフォルトの名無しさん2014/07/29(火) 18:40:51.49ID:s+4NszZe
>>363
不完全型の説明が間違ってるって言ってる訳じゃないよ。
配列を引数に取ると不完全型の配列になるんじゃなくて、
完全型のポインタになるんじゃないのかって話。

これは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:rvJq7ZUr
>>364 ニュアンスの指摘、正確な情報ありがとうございます
0366デフォルトの名無しさん2014/08/11(月) 12:26:15.10ID:DM9hqsto
B::C
D::C
とやりたいのだけどBとD両方で定義しないと駄目
Bだけで定義して両方使うにはどうしたらいいですか?


Bの派生がD
Cは定数
0367デフォルトの名無しさん2014/08/11(月) 12:35:00.77ID:c42QUAia
class B { public: static const int C=100; };
class D : public B {}
0368デフォルトの名無しさん2014/08/11(月) 12:52:18.57ID:DM9hqsto
D::Cが無理
0369デフォルトの名無しさん2014/08/11(月) 12:54:43.75ID:4YE8xGEJ
using B::C;
0370デフォルトの名無しさん2014/08/11(月) 13:52:12.20ID:DM9hqsto
別の方法で
using B::Cはメンテがかかるので
0371デフォルトの名無しさん2014/08/11(月) 14:43:03.41ID:xLVZtjTF
>>368
意味が分かんない
http://codepad.org/ilLpprw1
0372デフォルトの名無しさん2014/08/11(月) 15:00:35.00ID:DM9hqsto
>>371
基底クラスをテンプレートクラスにして
Cの型をlong longにして
100を静的関数にするとできないのかも
0373デフォルトの名無しさん2014/08/11(月) 15:47:23.53ID:/6BMCSKz
fputcで書きだしたバイナリデータを読み込みしたいのですがアドバイスをよろしくお願いします。

書き出しの部分
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) &amp; 0xFF, fptr);
fputc( nx &amp; 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) &amp; 0xFF, fptr);
fputc( (A[i][j][k] >> 16) &amp; 0xFF, fptr);
fputc( (A[i][j][k] >> 8) &amp; 0xFF, fptr);
fputc( A[i][j][k] &amp; 0xFF, fptr);
}

読み込みの部分(自分で考えてみましたがこれではだめでした)
int A_[256][256][256];
fin.open("output.bin", ios::binary);
fin.read((char*)&amp;nx,sizeof(int));
fin.read((char*)A_,sizeof(int)*nx*ny*nz);
0374デフォルトの名無しさん2014/08/11(月) 17:46:47.63ID:xLVZtjTF
>>372
意味が分かんない、条件変わってるし。

>>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
>>374
ありがとうございます。
事情があって書き出しのほうのソースは変更できないんです。
読み込みのソースをうまく修正して読むことができるようにはできませんでしょうか。
0376デフォルトの名無しさん2014/08/11(月) 22:07:52.71ID:xLVZtjTF
>>375
ループを逆にしてntohlで変換するだけ
書き込み時と逆にやればいいだけでしょ?
0377デフォルトの名無しさん2014/08/12(火) 01:54:38.79ID:sSgdt4Yu
>>373
書き出し
・バイナリファイルを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
エンディアンの問題を気にしないで済むようにするにはシリアライズ/デシリアライズかXMLかJSONか
テキスト入出力かその辺か
0379デフォルトの名無しさん2014/08/12(火) 05:50:37.85ID:sSgdt4Yu
>>378
フレームワークや明確な作法に従ってないってだけで、
これはシリアライズ・デシリアライズそのものだぞ。
0380デフォルトの名無しさん2014/08/12(火) 09:55:16.44ID:rfzbAqAv
>>376 >>377
ありがとうございます。
理解力が低くて申し訳ないですが、ビックエンディアンで書き出されたバイナリデータを
リトルエンディアンの環境(今読み込みをしようとしている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:rfzbAqAv
class BiteSwapCalc{
public:
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
どうでもいいが、なんで「Bite」なんだ。
しかも、クラスになっている意味がないし。
0383デフォルトの名無しさん2014/08/13(水) 03:18:36.39ID:qwKsatq9
OS Xのアプリケーションを作りたいんだけど、
そこでおすすめのGUIライブラリ教えてください。

今までWinAPIで色々作ってたけど、最近Macに乗り換えて、
大好きなCで何らかのアプリケーションを作ってみたいと思った。
出来れば色々便利なライブラリも教えてくれるとうれしいです。
0384デフォルトの名無しさん2014/08/13(水) 03:29:30.48ID:9jHt6nG8
>>377
補足、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:0qU1zyd8
hashmapのキーとしてアドレスを入れるのってやっていいんですか?
0386デフォルトの名無しさん2014/08/13(水) 04:37:11.79ID:gAzc5rgf
いいけど意味あんのか
0387デフォルトの名無しさん2014/08/13(水) 04:37:50.22ID:R+B95mq6
いいよ
size_tと同じ、中身がアドレスってだけ
0388デフォルトの名無しさん2014/08/13(水) 15:46:15.69ID:TZPZmb+y
格納時と参照時でアドレスがズレていないことを保証するのは
もちろん開発者の責任
0389デフォルトの名無しさん2014/08/13(水) 15:55:54.87ID:6MzZRjgo
class CSamp;
CSamp *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
>>389
そもそもsampの型がおかしい。遣り直し。
0391デフォルトの名無しさん2014/08/13(水) 19:00:46.39ID:KGiYCuxo
>>384
非常に丁寧にありがとうございました。とても参考になりました。
0392デフォルトの名無しさん2014/08/13(水) 22:49:39.78ID:yUu6IlV+
>>383
OS X で C で GUI はあんまりいいのないと思う。
C++ なら Qt あたりかなぁ。あとは wxWidgets とか。
どっちもマルチプラットフォームだから、Windows とかでも動かせる。
でも多分素直に Objective-C + Cocoa で作った方が Mac 色に染まれると思う。
0393デフォルトの名無しさん2014/08/14(木) 00:42:33.74ID:KTikXAiC
Visual StudioのC++で
プラットフォーム=Win32でビルドしていたWin32コンソールアプリを
プラットフォーム=x64でビルドして実行したら、ある関数のint型の引数
の受け渡しで、全然違う値に化けてしまう症状が出ています。
具体的には、こんな感じです。
呼び出した     関数で受け取った 
時点の値      時点での値
149     -->  1707222240
11     -->  -442583168
原因が分からないのですが、どのあたりを疑うべきでしょうか?
0394デフォルトの名無しさん2014/08/14(木) 00:51:32.99ID:wROGfWf+
32->64
int
0395デフォルトの名無しさん2014/08/14(木) 01:06:02.76ID:KTikXAiC
>>394
コメントありがとうございます。
でも、32でも64でもintは4バイトで同じだと思うのですが。
0396デフォルトの名無しさん2014/08/14(木) 01:42:03.02ID:BE82x3v5
a.cpp #include "hoge.h" <iostream>
hoge.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
>>393
引数にポインタが入っていない?
0398デフォルトの名無しさん2014/08/14(木) 09:52:30.31ID:mYwSdCAJ
>>395
コンパイラが採用しているモデルによって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
>>396
詳細載せましたよろしくお願いします
http://codepad.org/5ozwCQpB
0400デフォルトの名無しさん2014/08/14(木) 12:17:16.25ID:BE82x3v5
>>399
リモートとローカル間違えました
エラーログは同じで
環境は以下です
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
>>397,398
アドバイスありがとうございました。
原因分かりました。私の勘違いでした。
VSのデバッガの、変数の値を見るウインドウの
使い方に慣れていないのが原因でした。申し訳ないです。
0402デフォルトの名無しさん2014/08/14(木) 14:16:53.95ID:5fFoKeBH
初心者です。環境はVisualStudio2013です。
グローバル配列をexeと複数のDLL間で共有したいのですが
exeとDLL一対一だと__declspec(dllexport)を使ってできたんですが、
複数のDLLだとできませんでした。externも使ってみたんですがこれもできませんでした。
どうすればグローバル配列を共有できるんでしょうか。宜しくお願いします。
0403デフォルトの名無しさん2014/08/14(木) 14:20:15.22ID:MeOL7pvQ
dllのどれか一つでエクスポートして、他のdll,exeでインポートする。
0404デフォルトの名無しさん2014/08/14(木) 14:21:20.45ID:7UqN+IkX
>>402
ここらへんで

*.cpp
#pragma data_seg("COMMONDATA")

*.def
SECTIONS
COMMONDATA READ WRITE SHARED
04054022014/08/14(木) 14:23:02.79ID:5fFoKeBH
素早い回答ありがとうございます。やってみます。
04064022014/08/14(木) 14:46:40.88ID:5fFoKeBH
>>403のやり方でできました。ありがとうございました。
0407デフォルトの名無しさん2014/08/15(金) 00:58:10.02ID:lVSvlh9k
VisualStudio2012を使用しています。
文字を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
>>407
文字コードの問題では?
_T()マクロは、_UNICODE(だっけな?)が定義されていると、wchar_tとして処理される。
wchar_tは確かUTF-16なので、charで受けるとおかしくなる。

charをTCHARにしてみたら?

ただ、ワイド文字を使うと英数字も2バイトになるけど
0409デフォルトの名無しさん2014/08/15(金) 01:26:34.19ID:cLr8J/Qn
>>407
char ch = _T('あ');
の時点で理解不足
http://msdn.microsoft.com/ja-jp/library/c426s321.aspx
_TだのTEXTだののジェネリックは速いんじゃないの?
0410デフォルトの名無しさん2014/08/15(金) 07:36:59.01ID:sObSMUrm
>>407
char ch[2] = 'あ';
char s[9];
sprintf_s(s, _countof(s), "%x%x", ch[0], ch[1]);
0411デフォルトの名無しさん2014/08/15(金) 14:23:34.12ID:ADzFYem4
>>399
mainframe.cppの中ではstd::stringとしておくか、using namespace std;等で、
std::stringをmainframe.cppの中の名前空間でも使えるようにしておく。

けど、名前が衝突したりするしusing namespace std;はおすすめしない。
0412デフォルトの名無しさん2014/08/15(金) 14:28:27.37ID:ADzFYem4
>>407
ShiftJISでは全角文字は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
>>411
あぁなるほど 名前空間の存在を失念してました ありがとうございます!
04144072014/08/15(金) 21:10:18.95ID:lVSvlh9k
返答ありがとうございます。
charをTCHARにする方法、>>410や>>412で勧められた2バイト文字を文字列として扱う方法の両方でうまくいきました。
お察しの通りこれまで「おまじない」として_Tマクロを使っていたので、ちゃんと理解を進めるよう努力します。
0415デフォルトの名無しさん2014/08/18(月) 07:20:53.47ID:cR2JPW/A
cocos2dやunityを使って何か制作してみたいと思いC++勉強しはじめたのですが
ポインタ変数はようはjavaでの参照型変数みたいな認識でいいんですかね?
0416デフォルトの名無しさん2014/08/18(月) 07:34:15.21ID:BFPWuSMs
ええで
0417デフォルトの名無しさん2014/08/18(月) 07:34:21.69ID:ArWtLEqw
ある意味ではそうだけど…動的確保したもの入れてる場合、自分で開放しないと消えないって点は大きく違うし、
配列とかはポインタがメモリ上の何処を指してて自分が何処を操作したいのか意識できないと途中でハマるかも。
C++ならスマートポインタとかstd::vector他のコンテナとか使ったほうが楽できるが、リークは起こさないようにね。
0418デフォルトの名無しさん2014/08/18(月) 07:35:37.07ID:9zqJA8S0
javaは知らないが、javaの参照型変数は、c++の参照相当でないか?
c++の参照と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:DekYufYJ
>>418
C++の参照とは違い、nullを参照することを前提とした仕様になってる
んでリファレンスカウントなどを行うことを考えると
C++で言えばshared_ptrが一番近いんじゃないかと
0422デフォルトの名無しさん2014/08/18(月) 08:35:38.75ID:DekYufYJ
>>419
C言語はOOPLでは無いので、class文などが無くOOPがしづらいが、その分他2者と比べて仕様が少なめ
低いレイヤー向けのプログラムによく使われる

C++はC言語のコードがほぼそのまま動くように作られた、Cとは別の言語
全部の仕様を把握するのは大変なので分かってる部分だけで組む人も多い

現在はC++環境の互換機能でC言語環境の代用とすることも多くなったが、一応別言語なので
それに慣れてると純粋なC言語の環境に触ったときつまづいたりする

C#は似たところもあるが、根本的に別の言語でC/C++のコードがそのまま動くなんてことはまず無いと思っていい
0423デフォルトの名無しさん2014/08/18(月) 08:42:55.69ID:2iJxkFC+
>>420
なるほど。俺は馬鹿だったのか

>>422
ありがとう
0424デフォルトの名無しさん2014/08/18(月) 13:22:40.71ID:OdlWZdI3
今頃気づいたか
0425デフォルトの名無しさん2014/08/18(月) 19:08:57.93ID:0GH1txVb
なんてこった…こういう相手には

究極呪文「馬鹿には無理」は通用しない!!
0426デフォルトの名無しさん2014/08/19(火) 00:25:54.48ID:Ihvi0tCP
二つのVectorを連結する場合、
http://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:DnbUByEk
1だよ
0428デフォルトの名無しさん2014/08/19(火) 19:55:40.06ID:mxmpwOEU
なんでVectorに連結演算子を実装しないの?
0429デフォルトの名無しさん2014/08/19(火) 22:58:45.34ID:MNYlxzwL
ここにもQZが潜伏してたか
ほんとCが好きだな
0430デフォルトの名無しさん2014/08/20(水) 00:48:36.69ID:fMATK+WF
VisualStudio 2013 C++で
関数を再帰呼び出ししたら
warning C4717: すべてのコントロールのパス、関数を回帰するとランタイム スタック オーバーフローが発生します。
って出るんですが、スタックを多めに取って実行すれば問題なく実行出来るのですが、
場合によっては、そのスタックでも足りない可能性はあります。
とは言っても再帰を使わない方式に書き換えるのは難しいのですが、こういう場合、
どういう対策が良いでしょうか?
0431デフォルトの名無しさん2014/08/20(水) 02:08:22.86ID:7ZTzP0p/
>>430
アルゴリズムを見直して、出来るだけ再起を減らす。ループに出来る所は、ループに直す
例えば、自分で自分を呼び出す関数は、予め確保したメモリに、計算結果を書きこんで、関数は抜けるようにする。
その関数を呼び出す所をループにして、計算結果を元に条件分岐して、渡す引数を変更するなどの処理をつけるとか。
あと計算する順番を工夫するとか。(再起で最後に計算するものがわかっていたら、それから計算するなど)

もしくは再起に強そうなschemeを使うとかw
0432デフォルトの名無しさん2014/08/20(水) 07:44:24.11ID:hY37C+OW
>>430
二分木を使っているなら平衡二分木に切り替えるとか
0433デフォルトの名無しさん2014/08/20(水) 11:27:40.36ID:8EAQY78n
>>430
再起の時に関数呼び出しでコールスタックを積み上げる代わりに、
再起の時に自前のスタックにローカル変数を積み上げればループに書き換えれる。
0434デフォルトの名無しさん2014/08/20(水) 16:51:06.48ID:fMATK+WF
>>431,432,433
みなさんアドバイス有難うございました。
>ループに出来る所は、ループに直す
この方式に変更できました。
意外と簡単に出来ました。助かりました。
>平衡二分木に切り替えるとか
普通の二分木しか知らないので勉強します。
0435デフォルトの名無しさん2014/08/20(水) 17:12:14.82ID:rntLD2SQ
main.cpp クラス.h クラスメソッド定義.cppと分けた場合
ヘッダを正しくincludeすればヘッダファイルでプロトタイプ宣言する時STLコンテナ等includeする必要はありませんよね
色々ためしてヘッダを正しくとはincludeの順番も関係あると気づいたのですが
どうにもCE外れなくて 知識をください
0436デフォルトの名無しさん2014/08/20(水) 17:16:19.85ID:m9TNP3mu
そんなincludeの順番でコンパイルエラーになるとかならないとかやめてくれよ
ヘッダで使ってるならちゃんとincludeしてくれ
0437デフォルトの名無しさん2014/08/20(水) 17:31:17.86ID:rntLD2SQ
>>436
標準ライブラリなら衝突しないしそうするべきですかね
一発でCE解決するんですがどうにも納得いかなくて
0438デフォルトの名無しさん2014/08/20(水) 17:57:28.58ID:YTuxoJAp
>>437
的外れな事言ってたらスルーしてくれ

-----クラス.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:lf2AdZUe
CEってなに?
0440デフォルトの名無しさん2014/08/20(水) 18:10:12.42ID:rntLD2SQ
>>439 すみませんコンパイルエラーです
浸透してるものかと思い怠けました
0441デフォルトの名無しさん2014/08/20(水) 18:21:45.98ID:rntLD2SQ
>>438 曖昧な質問にありがとうございます
STLコンテナを使うプロトタイプ宣言において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
>>441
> 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+WF
横から失礼しますが、
I_MAIN_I
I_クラス_I
という書き方は、業界の標準的な記法なんですか?
0444デフォルトの名無しさん2014/08/20(水) 18:30:42.19ID:lf2AdZUe
何業界だ
0445デフォルトの名無しさん2014/08/20(水) 18:39:08.76ID:fMATK+WF
C/C++業界です
0446デフォルトの名無しさん2014/08/20(水) 18:43:20.13ID:YTuxoJAp
>>443
違うよごめんね
アンダーバー1つや2つで挟んだのは使用しない方がいいからIつけただけ
0447デフォルトの名無しさん2014/08/20(水) 19:11:02.35ID:rntLD2SQ
>>442 なるほど 合理的ですね そうします
どうもありがとうございました
0448デフォルトの名無しさん2014/08/20(水) 19:46:10.64ID:RXWpuYSN
俺は INCLGRD ってプリフィクス付けてる
0449デフォルトの名無しさん2014/08/20(水) 22:33:57.06ID:fMATK+WF
>>446
ああ、そうですか。
私の場合、いい用語が思いつかなかったので、

#ifndef ClassAのヘッダはインクルードされた

みたいな変な名前にしているので、I_クラス_I が業界標準なら真似しようかなと
思ったのですが。

>>448
#ifndef INCLGRD_ClassA

こんな感じですか。この方式を私も使わせてもらおうかな。
0450デフォルトの名無しさん2014/08/20(水) 23:43:01.23ID:g2oSYh4j
Cなら大体ファイル名のドットと両端をあんだばにしたものが定番じゃないの?
main.hなら
#ifndef _MAIN_H_
みたいな
0451デフォルトの名無しさん2014/08/21(木) 00:04:31.22ID:cKYAbYCX
グローバルスコープを持ち_で始まる名前は実装系のために予約されているので使うべきではない
0452デフォルトの名無しさん2014/08/21(木) 00:07:38.16ID:yvxtVK3I
何故か定番だけど、本来アンダースコアで始まる識別子は処理系が使うためのものだからなあ
ユーザ(この場合は、処理系のユーザ=一般のプログラマ)としては、あまり勧められん
0453デフォルトの名無しさん2014/08/21(木) 00:12:41.20ID:8LHCWH/J
>>449
非標準だけど、VSでもg++でもclangでも使える#pragma onceでいいんじゃない?
0454デフォルトの名無しさん2014/08/21(木) 00:28:02.42ID:hIdRF2P5
>>453
ああ、なるほど。
でも、ヘッダーの多重インクルードに何度も悩まされたので(今も)、
#ifndef
と
#pragma once
の両方を使っているのですが、それは無駄ですね。pragmaだけにするかな。
0455デフォルトの名無しさん2014/08/21(木) 01:38:39.48ID:ftoiqPr5
VC++でメンバ配列の初期化をしようとしたら
クラス、構造体、共用体のメンバーは、初期化できません。
とエラーが出るのですがplacement newを使う以外に回避方法はないんでしょうか
0456デフォルトの名無しさん2014/08/21(木) 01:47:07.64ID:bEzT5YFt
>>455
ソースは?
0457デフォルトの名無しさん2014/08/21(木) 02:15:49.74ID:hY3kzjbp
g++で-std=c++11つけろって言われるやつかな
0458デフォルトの名無しさん2014/08/21(木) 06:10:15.31ID:ImdJ7Vgv
>>455
ふつうにコンストラクタで自前で好きな値にセットすればいいと思うんだけれども‥
そもそも配列の初期化(を = {0} とかでお手軽に記述するの)はプログラムの最初での初期化の場合にのみ、別の記述として意味があるのであって、
スタック上とかヒープ上の不定領域を初期化したいのなら、そのようにコードを書くのが、そしてそっちのほうがわかりやすいのでは?

>>457
C99 とかみていると、世の中おかしくない?とか思ってしまう
0459デフォルトの名無しさん2014/08/21(木) 08:12:43.96ID:wIaa1KaJ
>>453
#pragma onceだとインクルードガードみたいに範囲指定できなくね?
0460デフォルトの名無しさん2014/08/21(木) 08:33:19.66ID:lr9MxyFk
>>459
俺は >>453 じゃないけど範囲指定いらなくね?
まあ、個人的には環境を選ぶ pragma は好きになれないから、結局インクルードガードで全体を囲ってしまうんだが。

ところで、ヘッダファイルにインクルードガードもしくは pragma once って、もはや必須じゃね?
このスレのテンプレ化したいくらいだ。
0461デフォルトの名無しさん2014/08/21(木) 08:41:01.70ID:hozPYr3C
インクルードガード一択
0462デフォルトの名無しさん2014/08/21(木) 09:02:16.47ID:KDaiW863
むかしばっちゃがpragma onceは違うパスで参照されると効かないからincludeガード一択だって言ってた
0463デフォルトの名無しさん2014/08/21(木) 09:33:01.41ID:QQWyFLQR
違うパスにおいてある同一ファイルを混ぜてビルドとかトラブル怖い。
0464デフォルトの名無しさん2014/08/21(木) 11:07:18.52ID:wLVq0/GL
文字列char* lineの処理方法で、次のようなものが解説されていました。

while (*line) {
 /*処理*/
 line++;
}
あるいは
while (line[i]) {
 /*処理*/
 i++;
}

文字列末尾に\0がある前提のプログラムだと思うんですが、もし末尾の\0が無い文字列(?)を意図的に与えたら、\0をどこかに発見するまで与えた文字列(?)のメモリ範囲を超えてどこまでも処理を続けてしまうのでしょうか?
0465デフォルトの名無しさん2014/08/21(木) 11:08:20.98ID:hozPYr3C
メモリ範囲を超えてどこまでも処理を続けてしまう
0466デフォルトの名無しさん2014/08/21(木) 11:09:31.02ID:Rf32jxet
違うパスに置いてある同一ファイルとか本当にずっと同一だったらいいけどね。
0467デフォルトの名無しさん2014/08/21(木) 11:15:24.56ID:wLVq0/GL
あ、後者の方はメモリエラーで強制終了かも?
0468デフォルトの名無しさん2014/08/21(木) 11:17:44.17ID:baeu0mZS
>>466
そうならないようにアクセス違反的なエラーを出すのがOSの役目
0469デフォルトの名無しさん2014/08/21(木) 11:20:53.86ID:Rf32jxet
>>467
どっちもいっしょ

>>468
両方書き込み専用にしておくってこと?
そんなことする前に一つの場所においてパス通すべきだとおもうんだが
0470デフォルトの名無しさん2014/08/21(木) 11:21:19.13ID:Rf32jxet
書き込み専用ってなんだ読み込み専用だ
0471デフォルトの名無しさん2014/08/21(木) 12:15:13.79ID:wIaa1KaJ
>>469
>>468は>>467あてじゃね?
0472ID:baeu0mZS2014/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:wIaa1KaJ
スレ名右クリック再読み込みでok
0474デフォルトの名無しさん2014/08/21(木) 14:58:36.33ID:baeu0mZS
>>473
thx 憶えておくわ
0475デフォルトの名無しさん2014/08/21(木) 17:41:56.75ID:QQWyFLQR
>>464
Yes。ただし、どこかでメモリアクセス違反などすれば止まる事もある。
コンパイラ等がアクセス違反検出用の処理を追加した場合も止まる。
>>469
NUL文字終端が無い固定長配列って可能性の話かもしれん。
>>472-473
どのレスが消えたのか分からないけど、未だに独断透明削除が続いてんのかよこの板・・・
0476デフォルトの名無しさん2014/08/22(金) 00:33:59.73ID:l//fiCSE
VisualStudio 2013 C++を使ってプログラムを描いているのですが、
一部クラスの使い方がわからないので教えていただけると幸いです。

//コンストラクタ
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
>>476
初期化しているだけ
初期化子リストでググると幸せになれるかも
0478デフォルトの名無しさん2014/08/22(金) 01:10:55.70ID:bnST7d3s
> Ex)Move::Move(int shape_id) : X(x),Y(y){}
>
> というプログラムがあったとして、
ないでしょ。
0479デフォルトの名無しさん2014/08/23(土) 20:22:17.27ID:+lV5UoHo
std::difftimeが秒単位の差を整数値なのにdoubleで返すのは、古い仕様のC言語にはlong long intがないから?
time_tってただの__int64みたいだし、単に引き算してintにキャストしてもおk?
0480デフォルトの名無しさん2014/08/23(土) 21:59:53.82ID:++Jtu7HW
>>479
パフォーマンスを要求されるなら、64ビット整数の引き算の結果をintにキャストすればいい。
そうでないなら、difftime()の戻り値をintにキャストすればいい。
0481デフォルトの名無しさん2014/08/23(土) 22:48:22.43ID:+VQeeysP
>>479
> 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:PkG6bn0Z
time_t2int() みたいな関数作って 念のため条件コンパイルでくくっとけ
0483デフォルトの名無しさん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
>>479
参考URL
http://okwave.jp/qa/q5584845.html

> time_tってただの__int64みたいだし、単に引き算してintにキャストしてもおk?
用意されているライブラリ関数を使わず、プログラマ自身が自分でコーディングするという
リスク・テイキングに見合うメリットが得られるのかな
04854842014/08/24(日) 13:51:28.91ID:zZu98MZL
下記の部分を撤回します。すまない。
; 用意されているライブラリ関数を使わず、プログラマ自身が自分でコーディングするという
; リスク・テイキングに見合うメリットが得られるのかな
0486デフォルトの名無しさん2014/08/24(日) 18:51:21.87ID:h7b5TqwT
>>477
ありがとうございました、理解しました
0487デフォルトの名無しさん2014/08/28(木) 17:09:19.37ID:qW74C0E4
同クラスの違うメソッドから構造体にアクセスすると、2つ目のメソッドからアクセスした瞬間、thread 1 exc_bad_accessで落ちます。
かなり初心者のためよくわかりませんが、ポインタのアクセスによるメモリ関係のような気もするのですが、、
どのように対応すればいいのでしょうか?対応方法がわからず、困っています。。

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:wVJDe5T1
問題はあんたの書いてないところにある
0489デフォルトの名無しさん2014/08/29(金) 07:16:07.73ID:5ncU7wKD
C言語で配列の初期化について以下って同じですか?
char aaa[5]="";
char bbb[5]={0};
0490デフォルトの名無しさん2014/08/29(金) 07:26:13.24ID:rM6G6SCh
いいえ
0491デフォルトの名無しさん2014/08/29(金) 08:04:00.30ID:xp2wSl6N
>>490
すみません、質問の仕方が悪かったです
どうちがうのでしょうか?
前者はすべての要素に\0は入らない、保証されないということでしょうか?
0492デフォルトの名無しさん2014/08/29(金) 08:07:07.38ID:rM6G6SCh
はい
0493デフォルトの名無しさん2014/08/29(金) 09:21:41.66ID:ed/IJtRD
aaa[1]以降は不定だね。
0494デフォルトの名無しさん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
>>492
>>493
本当?

初期化リストで配列を初期化する時の、部分指定のルールから考えると、未指定部分はゼロ初期化される方が自然な気がする。

もちろん規格は未確認だが。
0496デフォルトの名無しさん2014/08/29(金) 12:55:35.34ID:nIzdonyc
初期化リストが足りない部分は0が指定されていると解釈される。
0497デフォルトの名無しさん2014/08/29(金) 13:41:19.97ID:P5dHkx7D
サイズ指定の配列の場合は残りも初期化、つまり>>489の場合はどっちも同じだな
6.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.
04984872014/08/29(金) 18:05:43.82ID:5WqPiw0s
>>488
ありがとうございます。
問題はそこじゃないという指摘のため、間のソースを全部削ったんですが症状は変わらず、ハマっています。。
構造体自体にはアクセスできているんで、そこではないでしょうし。。

メモリやポインタは関係ないということですか?
0499デフォルトの名無しさん2014/08/30(土) 01:50:13.00ID:X4lcw1AT
>>487
settingAとsettingBが同じ内容なんだけど…。

2度目にアクセスした時
・charaは有効なのか?
・chara->getUserData();で得たparamは有効なのか?
0500デフォルトの名無しさん2014/08/30(土) 04:32:00.31ID:3Iv0NAQx
>>498
全部削ったならmain無いから動くわけねぇだろ
貼ってないところに問題が有るんじゃねって話かと
0501デフォルトの名無しさん2014/08/30(土) 12:03:50.32ID:ZWIpt6n5
しまいには書いてるソースと実行ファイルはきちんと同期してるのかという話に
0502デフォルトの名無しさん2014/08/30(土) 15:56:39.08ID:Bqq2YL4t
forとイテレータと範囲forでループ回すと
範囲for≧for>>イテレータって感じになるんですけど、イテレータは鈍足って事でいいんですか?
コンパイラはgcc49で最適化オプションは-O2のみです
0503デフォルトの名無しさん2014/08/30(土) 16:09:58.71ID:FDr4RXqe
イテレータの速度は実装、コンパイラ依存だろ。
速度的にはポインタ操作同等になるかもしれないし測ってみないとわからん。
0504デフォルトの名無しさん2014/08/30(土) 18:20:24.36ID:Bqq2YL4t
>>503
なるほど
速度を重視するなら動かしてみて確認する他なさそうですね
ありがとうございます
0505デフォルトの名無しさん2014/08/30(土) 21:46:42.81ID:Ec2+uw3j
後置にしてるとか
05064872014/08/31(日) 03:12:32.73ID:O5SWMn7c
>>500
mainは削っていません。。
問題はたしかにそこじゃなかったです。。

>>499
同じコードでアクセスしていました。
おかげさまでヒントになり、解決しました。
2つ目がsetUserDataの値がうまくsetされておらず。。
getしたら落ちたというオチみたいでした。。


ありがとうございました。
0507デフォルトの名無しさん2014/09/09(火) 12:50:40.41ID:fY2rmFRQ
http://blog.livedoor.jp/k_yon/archives/52145222.html
このページの最初のコードをg++でコンパイルするとsymbols not foundになるのですが,追加が必要なライブラリディレクトリやインクルードディレクトリはあるのでしょうか?
一応-Lでboostのlibディレクトリを追加しています.
0508デフォルトの名無しさん2014/09/09(火) 13:52:35.93ID:LhYKCGJX
>>507
エラーメッセージを丸ごと貼ってみてくれ。
0509デフォルトの名無しさん2014/09/09(火) 14:17:05.62ID:fY2rmFRQ
>>508
ありがとうございます。
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
C++関数の戻り値を参照で受け取るとき、以下のようにした場合、get の return で
作成されたオブジェクトを参照で受け取っても事故が起こらないと保障されていますか?

const std::string &amp; get() {
return std::string("ABC");
}

void main() {
const std::string &amp;s = get();
printf("%s", s.c_str()); // ←どうなる?
}
0511デフォルトの名無しさん2014/09/10(水) 19:35:59.76ID:8YG7t37E
すみません、間違えました。実際には以下のコードです

const 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
>>511
確か大丈夫だったはず
0513デフォルトの名無しさん2014/09/10(水) 20:37:32.22ID:AEk8bFgU
保証されています。
一時オブジェクトを参照で受け取ったら一時オブジェクトの生存期間は参照の生存期間と同じになります。
0514デフォルトの名無しさん2014/09/11(木) 23:18:49.66ID:NV7aTG5j
すみません、質問です

typedef struct _str{
unsigned char *a1;
unsigned char *a2;
unsigned char **a3;
}str;


この構造体のa3には要素数不明のデータを収めるための可変配列を扱いたく
関数内でreallocして拡張しようと思っているのですが
どうもうまく行きません。
上記構造体の型を利用してa3を可変配列として扱うにはどのように記述すればよいかサンプル作っていただけませんか?
0515デフォルトの名無しさん2014/09/12(金) 00:10:39.54ID:ZJPIaP/+
>>514
うまく行かないサンプルうpしてみろ
問題点を指摘してやる
0516デフォルトの名無しさん2014/09/12(金) 00:11:45.57ID:qRf/kDN5
なんでポインタのポインタ?
unsigned char * a3;
...
void * tmp = realloc(strvar.a3, newsize);
if (!tmp) strvar.a3 = (unsigned char *)tmp;
0517デフォルトの名無しさん2014/09/12(金) 00:12:56.60ID:qRf/kDN5
まちがった if (tmp) だ
0518デフォルトの名無しさん2014/09/12(金) 12:55:55.73ID:+9CMXkcE
>>516
ありがとうございます

a3は可変配列にしたいのでダブルポインタを使いました
普通のポインタで使うとreallocしたあとの可変配列参照はa3[n]でいけますか?
0519デフォルトの名無しさん2014/09/12(金) 13:44:49.23ID:AGOnRFED
>>514
こういう事がしたいん?
C++ならvector使うに限るけどな
Cならポインタの配列をreallocすればいい
0520デフォルトの名無しさん2014/09/12(金) 13:45:08.52ID:AGOnRFED
あ、ごめん

http://ideone.com/yeMzyV
0521デフォルトの名無しさん2014/09/12(金) 19:47:46.99ID:em+uIfWX
>>520
このサンプルソースってc++ですか?
newってcで使えるんですか?
素人ですみません
0522デフォルトの名無しさん2014/09/12(金) 21:41:43.02ID:pvIGOvd5
>>514
お前のいっている可変配列ってどういうものだよ?
(mallocで確保した領域は配列的に使えるけど配列ではない、ってところは置いとくとしても)
char**なら可変配列だけどchar*なら可変配列ではないっていうものがお前のいう可変配列なら他人には通じない定義だぞ
0523デフォルトの名無しさん2014/09/12(金) 22:19:14.01ID:DhkuCj0a
ダブルポインタっていう人まだ出てくるか
どこでそんな言葉覚えて来るんだろうな
0524デフォルトの名無しさん2014/09/13(土) 01:31:31.63ID:bfbBE48o
>>523
入門書や入門サイト。リトマス紙になるね。
0525デフォルトの名無しさん2014/09/13(土) 03:42:25.04ID:3jc89SS7
普通は何て言うの?
ポインタのポインタ?
0526デフォルトの名無しさん2014/09/13(土) 03:43:16.80ID:XWWKFUhS
ポポインタ
0527デフォルトの名無しさん2014/09/13(土) 08:12:26.61ID:71yOysF2
ぽいぽい
0528デフォルトの名無しさん2014/09/13(土) 08:51:51.73ID:zuv4PMvj
*** ポポイのポイ
0529デフォルトの名無しさん2014/09/13(土) 09:17:36.52ID:KASpJfW1
>>525
ポインタへのポインタ

規格の文面でのポインタの表現は 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+4
個人の感想だろ?
0533デフォルトの名無しさん2014/09/13(土) 10:48:30.10ID:33zq3RAT
>>529の「規格の表現にならう」が、客観的な落としどころだとおもう
だけど、ちょっと揚げ足取りみたいになってきたな
0534デフォルトの名無しさん2014/09/13(土) 11:05:28.56ID:KASpJfW1
日本語でのダブルポインタならそうでもないけど英語での double pointer は
pointer to pointer の意味ではなく pointer to double、double(型)へのポインタ
の意味にとられることがあって紛らわしいので使わないようにしろと言う話もある
0535デフォルトの名無しさん2014/09/13(土) 11:45:37.70ID:7Nr6UObN
>>521
http://ideone.com/dZN6kw

memcpy_sはMinGW4.9.1ならあるんだけどな
memcpyにすれば動くはず
0536デフォルトの名無しさん2014/09/13(土) 11:46:34.75ID:7Nr6UObN
それにしても最適化かけるとひでえwwww
memcpyが単なるレジスタのmovになってる
64bitは幅が広いから何でも簡単にできちゃうんだな
0537デフォルトの名無しさん2014/09/13(土) 14:45:34.57ID:SFutnRUx
>>514>>535
つか、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:N78ccrO0
諦める
0541デフォルトの名無しさん2014/09/14(日) 00:14:22.61ID:mkcFGBUS
>>539
operator int() なりを定義する
ただし、暗黙変換になるので、止めた方がいいと思う
0542デフォルトの名無しさん2014/09/14(日) 00:28:31.12ID:pYL8ChvE
ポインタのポインタはバグの温床だからC++ならポインタのリファレンスが使えるようになってるから
悩むよりもC++使った方が楽な場合が多いな
05435392014/09/14(日) 09:49:32.98ID:tidiM7B+
>>541
やっぱ、やめたほうがいいんですかね。
キャスト演算子定義は、試しましたが、
既に書いたコードのいろんなところで、
オーバーロード関数があいまいだというエラーが出てしまいました。
なので、代入演算子自体を定義したかったのですが。
0544デフォルトの名無しさん2014/09/14(日) 12:34:26.03ID:SUA5E3Us
>>542
使いこなせてないだけなんじゃ
0545デフォルトの名無しさん2014/09/14(日) 12:47:36.87ID:THGvpi5T
プロセスIDを受け取り PostMessage(hwnd WM_CLOSE, 0, 0)で該当するものを
終了させたいのですが、IEが終了したりしなかったりします。
Process Explorerを起動してみると iexplore.exe が
ツリー形式になっているのが原因かなと思っています。

 iexplore.exe
  └iexplore.exe

下の iexplore.exe のプロセスIDが指定された場合のみ、
上の iexplore.exe のプロセスIDを取得する方法を
教えていただけないでしょうか。
0546デフォルトの名無しさん2014/09/14(日) 13:22:44.93ID:3ZBHn29x
ポインタのポインタ、例えば
char **buff;
などを扱えない人がプロジェクトにいてバグの心配があるのなら、
typedef char * BUFF;
typedef BUFF * BUFF_ARRAY;
としてBUFF, BUFF_ARRAYを使うようにすれば良い
ようなことを思いついた。
0547デフォルトの名無しさん2014/09/14(日) 17:02:06.25ID:1D8XKbcv
>>546
そういうのは却ってわかりにくくなるだけ
思い付いた本人だけはいいアイデアだと思うけど
0548デフォルトの名無しさん2014/09/14(日) 18:23:09.41ID:GiyK3reg
なぜ型名にBUFFなどというもんを思いつき、
ましてや、それを掲示板で皆に読ませようとレスしたのか。

そのことが釣りでなければ本当に恐ろしい。
生粋の糞コード量産マシンでもないと書けないレスだ。
0549デフォルトの名無しさん2014/09/14(日) 18:28:32.79ID:s+BV7Cb9
好かんな
0550デフォルトの名無しさん2014/09/14(日) 19:07:50.80ID:P8BkuFbg
>>546
Win32APIがそんな感じだね
generic向けのTはありだけど
Pのtypedefはいらねー
0551デフォルトの名無しさん2014/09/15(月) 00:14:23.35ID:A5qiBZ0X
>>550
そうだ、Win32APIの作法に慣らされただけだな俺は。
しかも自分で思いついたと勘違いするとか、もう、これは、糞製造機だなw
05525462014/09/15(月) 00:14:56.04ID:A5qiBZ0X
 
0553デフォルトの名無しさん2014/09/15(月) 00:19:58.20ID:NURXBSEx
>>537
ああ構造体を値渡ししてんのか
いつも構造体をポインタ渡ししてるからそういうシチュエーションに出会った事がなかった
0554デフォルトの名無しさん2014/09/15(月) 10:27:15.23ID:PW8m4k3j
構造体のポインタ渡しするならクラスにしてメンバ参照でよくね
0555デフォルトの名無しさん2014/09/15(月) 10:39:22.00ID:8dgxuMjV
えっ?
0556デフォルトの名無しさん2014/09/22(月) 20:52:34.82ID:XE8gOusZ
経験言語c、Rubyです。バイトでc++やることになったのでロベール入門講座の途中から(c言語でないところから)読みすすめてます。
ただの予想なのですが、この言語ほかの言語に比べて複雑過ぎませんか?労力に見合ったパフォーマンスを得られるのでしょうか?
もちろん労力に合わなくても言語習得くらいやりますが
0557デフォルトの名無しさん2014/09/22(月) 20:57:25.69ID:UZeuYMIm
C++の機能は複雑というより基礎的なだけ。
JavaとかC#のほうが物量はある。
Rubyも公式外のライブラリを含めたら物量はある。
最近のC++の拡張は別にして、スタンダーテンプレートライブラリというのを実装するための仕組みを最低限取り入れたのがCからC++への変化。
0558デフォルトの名無しさん2014/09/22(月) 21:05:07.96ID:UZeuYMIm
C++より先にスタンダードテンプレートライブラリが存在していて、それを実装するための言語としてC++が作られた。
スタンダードテンプレートライブラリが扱えれば、内部の部品まで詳しく知る必要はないかもしれない。




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/C++で作られたライブラリが幾つあると思ってるんだよ…

>>556
コードの実行性能的な意味のパフォーマンスにあまり貢献しない機能もままあるね。
自分で設計して書くだけなら知らなくてもどうとでもなるって機能は多いというか、
CになくてC++にある機能はほぼすべてがそういう機能と言えなくもない。
ただ、多くの機能は無いと困るとかあると便利だとか、理由があって存在している。
コードの実行性能的な意味のパフォーマンスはC由来の部分でわりと完結しているが、
「あったほうが便利だから」等の機能にどんな価値を見出すかは君次第だろう。
0560デフォルトの名無しさん2014/09/23(火) 03:38:41.23ID:dVlUahkv
言語を網羅しようとすれば、物量と学習困難さは比例するだろ。
JavaやC#と比べ、C++の物量は少ない。
0561デフォルトの名無しさん2014/09/23(火) 04:59:39.32ID:RW747lS9
>>556
メモリ管理はC/C++ の方が複雑だが、C を知っておれば C++ もその延長戦上で、大きく悩まない、ときどき止まることはあったにしても。
C++ の STL を俯瞰できるようになったら、一山超えただろうか、この場合テンプレートの細部まで知る必要はなく、パターンで認識して使っている、というのでかまわない。
物量として少ないのは事実であるが、学習困難性は‥問者はCを知っているので学習困難性も低いだろう‥ >>560 はわりとあたっているな
05625562014/09/23(火) 05:31:47.36ID:x8kHQGOE
返信ありがとうございます
c++が基礎的というのはなかなかしっくり来る表現ですね
これでも物量はJavaやC#より少ないんですか・・・びっくりしました
テンプレートについて全部しる必要がない、と言うのは希望が持てそうです。ありがとうございました
ネストされたテンプレートを見て細かい仕様に思いを馳せてウッってなっていたところだったので・・・あちらこちらの命名がしっくりこないのは仕方なしで目をつぶりましょう. 覚えてしまえば関係なし!
0563デフォルトの名無しさん2014/09/23(火) 11:09:21.73ID:RZgQ8Ezi
CにしろC++にしろ細かな部分まで正確に把握してないとすぐ罠にはまるという点で
学習困難性は高い
ライブラリの物量なんて使う部分しか覚えなくて平気だろ
嘘つきどもめ
0564デフォルトの名無しさん2014/09/23(火) 15:14:32.71ID:Y91BvWUL
ライブラリにバグがあればソース無い限り修正不可
0565デフォルトの名無しさん2014/09/23(火) 15:53:24.78ID:+21wRmlf
>>562
C++の言語仕様は、JavaやC#より膨大だよ。
後者は、言語仕様がすっきりしていたのが人気が出た理由の一つだから。
0566デフォルトの名無しさん2014/09/23(火) 16:12:29.55ID:+21wRmlf
>>560
C++の物量は JavaやC#の3倍くらい多いよ。
0567デフォルトの名無しさん2014/09/23(火) 16:27:09.71ID:+21wRmlf
感覚としては、templateの複雑さ、xxxx_cast<yyy> の理解のしづらさ、
new(*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
C++には昔から正しく理解するのが難しい事柄として、コンストラクタと代入演算子の
違いが分かりにくいという問題がある。

CPerson person1 = CPerson(xxx);
CPerson person2;
CPerson person3();

↑はどれもコンストラクタが呼び出され、代入演算子は一度も呼び出されない。

CPerson person4;

person4 = CPerson(xxx);

↑見た目は似ているが、こちらはコンストラクタが呼び出された後、代入演算子が呼び出される。


また、引数なしのコンストラクタを「デフォルト・コンストラクタ」と呼ぶが、
それを自分で定義しない場合は、「デフォルト・デフォルト・コンストラクタ」が自動生成される。
こういった用語の理解が必要なのも、仕様の膨大さを感じさせる原因となっている。
0569デフォルトの名無しさん2014/09/23(火) 17:40:35.81ID:ZstUR7eg
>>556
> もちろん労力に合わなくても言語習得くらいやりますが

なら、グダグタ言わずに習得してから文句垂れろよ
0570デフォルトの名無しさん2014/09/23(火) 17:41:25.84ID:M/bHE28r
デフォルトデフォルトなんて規格のどこに書いてあるの?
0571デフォルトの名無しさん2014/09/23(火) 17:45:27.22ID:+21wRmlf
>>570
Googleで、言語を英語にして、「defaulted default constructor」で
検索してみるべし。
0572デフォルトの名無しさん2014/09/23(火) 17:50:40.14ID:rMNwwcoj
年老いた、ボケた爺さんプログラマが「プリンタ、プリンタ」言ってるので、
なんのことかと思ったら、ポインタのことでした。
0573デフォルトの名無しさん2014/09/23(火) 17:53:16.65ID:M/bHE28r
デフォルテッドじゃねーか
0574デフォルトの名無しさん2014/09/23(火) 17:56:26.11ID:ot8dc/K+
>>573
「デフォルト・デフォルト・コンストラクタ」の日本語訳で書かれた
本を見たことがある。
0575デフォルトの名無しさん2014/09/23(火) 18:10:55.26ID:ot8dc/K+
>>572
やっぱり、この辺の人は性格悪いな。
0576デフォルトの名無しさん2014/09/23(火) 18:41:17.04ID:ZstUR7eg
>>574
そりゃその本の著者/翻訳者がバカなだけでしょ
0577デフォルトの名無しさん2014/09/23(火) 18:44:49.10ID:ot8dc/K+
>>576
C++ for Dummies「C++のからくり」SOFTBANK
スティーブン・R・デイビス著
瀬谷啓介訳
0578デフォルトの名無しさん2014/09/24(水) 10:28:43.04ID:3Cm2Nqvi
>>567
キャスト、4つと言わずもうちょい分けても良かったのにと思う。
特にstatic_castとreinterpret_castのそれぞれの範囲が分かりづらい。
0579デフォルトの名無しさん2014/09/24(水) 10:36:13.63ID:cwxDUbr2
static_castは、

1. 整数<--->浮動小数
2. 整数のビット数が狭くなる方向への変換
3. 浮動小数点の精度や指数が狭くなる方向への変換
4. 整数の符号の有り無しの変換

が全部合わさっている。

reinterpret_cast は、内部表現のビット列をそのまま維持して、解釈(意味)
だけを変える。その意味では、上記2,4とは同じと言えるかもしれない。
やってみた事がないが、reinterpret_cast でも、2,4 は可能かもしれない。
つまり、static_cast と reinterpret_cast は共通部分を持っているのかも。
0580デフォルトの名無しさん2014/09/24(水) 12:41:39.16ID:YNAXKA8k
>>568
person3 の形式は存在しないでしょ。
0581デフォルトの名無しさん2014/09/24(水) 13:47:08.95ID:oTUae3YU
>>580
CPerson person5(xxx);

の形式は存在する。この形式で、引数のxxxが存在しない場合がperson3だ。
0582デフォルトの名無しさん2014/09/24(水) 18:20:37.32ID:ZWvFC4Uz
>>581
試してないでしょ?
0583デフォルトの名無しさん2014/09/24(水) 22:39:04.34ID:Gby0THyI
CPerson person5(xxx);
CPerson 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/FZoDJC
>>583
0585デフォルトの名無しさん2014/09/25(木) 07:39:45.04ID:C75VVLj1
>>583
もう何て言うか。。。
偉そうな事言うなら間違いは素直に認めないと。。。
05865682014/09/25(木) 08:55:09.18ID:gq4fP5ox
>>585
オイラは>>583ではないが、そもそも話の本質はそこじゃないからな。
0587デフォルトの名無しさん2014/09/25(木) 10:15:54.79ID:gq4fP5ox
スマン。

CPerson 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
>>582 >>585
一応言っておくと、あなたは言葉が少なすぎるからそうなるんだよ。

知っているなら言葉で説明すべきなのに、人を馬鹿にしたような言葉だけを
書いて、内容は全く書いてない。

日本語が不自由な人が外国からアクセスしているのかも知れんが。
0590デフォルトの名無しさん2014/09/25(木) 10:36:24.13ID:gq4fP5ox
>>585
>偉そうな事言うなら

そもそも、どこに偉そうなことを書いたのか、具体的に書いてくれ:
(かなり腹立つから。)
0591デフォルトの名無しさん2014/09/25(木) 11:05:48.34ID:FkhkjqOZ
>>568
> C++には昔から正しく理解するのが難しい事柄として、コンストラクタと代入演算子の
> 違いが分かりにくいという問題がある。

Cだって
int a[] = {1,2,3,4};
の=は代入演算子じゃない。

C++の問題じゃない。おまえが無知なだけ。
0592デフォルトの名無しさん2014/09/25(木) 12:54:24.76ID:gq4fP5ox
>>591
C++処理系を自分で作ろうとした時などに、代入演算子とどちらが呼び出されるか
明確にしたい時があるんだよ。

使うに徹すればどちらでも同じ結果になるので大した問題にならない。
0593デフォルトの名無しさん2014/09/25(木) 13:44:45.53ID:p4SXJv8d
>>591
> Cだって
> int a[] = {1,2,3,4};
> の=は代入演算子じゃない。
無知なので尋ねますが、この場合(配列の初期化に限定?)の「=」は何演算子と呼ばれてるんでしょうか。
0594デフォルトの名無しさん2014/09/25(木) 13:52:59.40ID:gq4fP5ox
>>593
自分が答えていいのか分からんが、={・・・}の部分全体で「初期化子」
と命名されていて、=自体は演算子とは言われない。
0595デフォルトの名無しさん2014/09/25(木) 15:21:13.91ID:p4SXJv8d
>>594
ありがとうございました。なるほど、C99で拡張されてからの命名なんですね。
0596デフォルトの名無しさん2014/09/25(木) 15:26:55.86ID:9dnJaqAQ
>>595
いや、だいぶ昔のANSI Cの定義でも「初期化子」という呼び方は変わって
ないはず。
0597デフォルトの名無しさん2014/09/25(木) 16:16:34.07ID:FkhkjqOZ
>>592
知ったかぶりもいい加減にしたらどうだ。
構文上、初期化子(の=)と代入演算子(の=)は明らかに異なる。

明確にするもクソもない。
0598デフォルトの名無しさん2014/09/25(木) 17:02:36.73ID:uEhi6Lrs
ID:gq4fP5oxはQZ
0599デフォルトの名無しさん2014/09/25(木) 18:07:39.07ID:yDHAaJNV
>>591
それ、分かりにくくないじゃん
0600デフォルトの名無しさん2014/09/25(木) 19:28:54.76ID:IK+pLUz6
>>598
それはQZを買いかぶりすぎ、QZにそこまで議論する能力はない
0601デフォルトの名無しさん2014/09/25(木) 21:31:00.88ID:C75VVLj1
>>590
>正しいかどうかを論じるなら規格文書を引いてこい。面倒なので俺はやらんがな!

これは偉そうではないのかい?
言葉少ないと思うなら聞き直してくれれば答えたよ。
0602デフォルトの名無しさん2014/09/25(木) 23:24:10.15ID:9dnJaqAQ
>>601
それを書いたのは自分ではない。
0603デフォルトの名無しさん2014/09/26(金) 00:04:30.42ID:uohd10wm
>>597
あなたは
「知ったかぶり」
という言葉の意味、誤解してない?
0604デフォルトの名無しさん2014/09/26(金) 01:07:01.59ID:A85zS2F0
>>602
えー???
じゃあ何で>>585へのレスに対して反応したの???
ちょっと、、、君も何と言うか。。。もう。。。
0605デフォルトの名無しさん2014/09/26(金) 02:58:00.10ID:AYYTDtXl
>>604
> オイラは>>583ではないが
ブーメラン乙
0606デフォルトの名無しさん2014/09/26(金) 07:50:16.55ID:A85zS2F0
>>605
あはは。
間違えた。

>>602
えー???
じゃあ何で>>583へのレス( >>583 )に対して反応したの???
ちょっと、、、君も何と言うか。。。もう。。。

だね。
0607デフォルトの名無しさん2014/09/26(金) 09:54:05.53ID:qY859vRI
>>606
意味不明。引っ込んでろ。バカ。
06085832014/09/26(金) 20:38:20.93ID:Hu/y6U8m
>>584-586>>601>>605
>>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
>>608
もうそれ以上傷口を広げ無くても良いのでは?
またもな人は面倒くさいから口出ししてないだけだと思うぞ
スレ発端は>>568だろうけど、好意的に見てもperson3の例をその文脈で持ってくるのはおかしい
そこに軽く突っ込んだ人がいて、真っ赤になって逆ギレ自演の嵐
0611デフォルトの名無しさん2014/09/27(土) 16:53:57.34ID:Es6Y0cNh
そのくだらないプライド捨てた方がいいのでは?
0612デフォルトの名無しさん2014/09/27(土) 17:58:36.18ID:DE3jcZJu
荒れてるなー
C/C++スレには自分がスゲーな奴で、行間読めない奴が住み付いてるから気をつけな
またお前かって感じ
言葉多く発狂してる方な
0613デフォルトの名無しさん2014/09/27(土) 18:48:44.72ID:0z93SAz9
567を書いたものだが、「alias」の部分は知ったかぶりといえば知ったかぶり。
英語圏で「alias」と呼ばれている仕様がある時期から導入されたらしい事を耳に
入れたが、まだ学んでない。typedef aaa=bbb; みたいなやつの事かな・・・。
using namespace xxx; みたいなのも勘で理解しているだけで厳密な仕様書は読んでない。
0614デフォルトの名無しさん2014/09/27(土) 18:59:06.74ID:0z93SAz9
http://en.cppreference.com/w/cpp/language/type_alias

↑ここに書いてあるね。
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:LJYiMxQ9
例外とassertどう使い分けてる?
0616片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/10/10(金) 22:14:36.53ID:naOIlr8a
デバッグ時のみ、プログラムが正常に動作しているか確認したいときはassertを使う。
#define NDEBUGしているときはassertは取り除かれるので、
リリース時の性能には影響しない。
0617片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/10/10(金) 22:18:18.16ID:naOIlr8a
メモリー不足のとき、単純なnewは、bad_alloc例外を投げる。
処理全体に影響する状態を処理の外側に伝えるのに例外を使う。
0618片山博文MZ次期CEO ◆T6xkBnTXz7B0 2014/10/10(金) 22:29:29.93ID:naOIlr8a
例外は投げられるとcatchされるまで制御構造を飛び越えることができる。
0619デフォルトの名無しさん2014/10/11(土) 00:08:46.31ID:FL6g2QAm
質問です
main()の中に関数A()があり、その中にB()があります
main()で定義したvector1,vector2を参照渡しでB()内まで持って行くにはA()とB()の二段階で渡せば良いのでしょうか?
0620デフォルトの名無しさん2014/10/11(土) 00:13:03.12ID:bs/sFubV
肺、爽です
0621デフォルトの名無しさん2014/10/11(土) 00:17:26.95ID:37xXCw5p
実際に書いてみればいいんやで
0622デフォルトの名無しさん2014/10/11(土) 00:21:52.21ID:OlHZdekY
>>620
ありがとう

>>621
書いてみる
0623デフォルトの名無しさん2014/10/14(火) 09:18:48.40ID:2DjoFVlO
cppファイルはsrcフォルダー
hファイルはincludeフォルダー
ではcppunitで作ったユニットテストのhとcppファイルは
どこに入れたらよいですか?
0624デフォルトの名無しさん2014/10/14(火) 09:41:55.90ID:GdT+JZRZ
testフォルダ以下にご自由にどうぞ
個人的にはsrcとincludeに分ける必要もないと思う
0625デフォルトの名無しさん2014/10/14(火) 10:15:05.74ID:A0D4+krR
メインのフォルダ
プロジェクト名のファイルを入れるフォルダ
機能毎に分けたファイルを入れるフォルダ
にしてるわ
0626デフォルトの名無しさん2014/10/14(火) 10:50:39.94ID:OGTpBG0C
>>624
ありがとうございます。
>>625
機能ごとというとプログラム名のフォルダーということですか?
linuxだとプログラムに拡張子をつけないしきたりで
大文字と小文字を区別するしきたりじゃないですか。
windowsの場合は大文字と小文字を区別しませんから
linux環境で
フォルダ名を大文字のプログラム名、プログラムを小文字のプログラム名に
してwindowsに輸入するとコピーできない問題があります。
0627デフォルトの名無しさん2014/10/14(火) 10:56:53.46ID:PgFOtI12
マングリングってなんかエロいよね
0628デフォルトの名無しさん2014/10/14(火) 11:36:29.63ID:zT0VwE4n
>>626
完成したプログラムを収めるフォルダ作るとか出力先を考えれば良いんじゃないの?
プログラムをプロジェクトフォルダのトップ直下に持ってきたいなら、
プログラム実行時に不要なフォルダやファイルはsrcとかbuildの中に詰め込んで隠すとか。
0629デフォルトの名無しさん2014/10/14(火) 12:28:43.13ID:A0D4+krR
>>626
機能毎に分けたファイルを1つのフォルダへって意味ね
メイン + 自身 + オプションみたいな感じ

プロジェクトフォルダ
->メインフォルダ
->プロジェクトフォルダ
->機能毎フォルダ
->Debug
 ->実行ファイル
->Release
 ->実行ファイル
じゃあかんの?
0630デフォルトの名無しさん2014/10/14(火) 14:21:37.63ID:OGTpBG0C
>>629
それでいいです。
0631デフォルトの名無しさん2014/10/14(火) 19:12:43.81ID:Xm+aC3qM
>>627
まんぐり返しか
0632デフォルトの名無しさん2014/10/15(水) 20:35:47.20ID:EiiFXnTi
質問です

OSSのソース眺めてたら、
いわゆる普通の
ヘッダーにクラスやメソッドの宣言を書いて、
.cppに実装を書いて、ってやり方ではなく、

.hにも実装を書くし、
.cppにはテストコードとか書いてるし、

それで、hoge.cpp
に必要なすべてをincludeでつめこんで
hoge.cppをコンパイル&ビルドしてるんだけど、
こういうビルドの仕方ってなんて言うの?
なんか、こういう方式って名前付いてますか?

まあ、確かに、ソースコードの量が多くなると
リンク時に指定するオブジェクトファイルの数が多くなり過ぎるから、
必要なコードをすべてincludeしたファイルをコンパイルー>リンクした方が楽ってことなんだと思うけど.

ちなみにsconsでビルドしてます。

よろしくお願いします。
0633デフォルトの名無しさん2014/10/16(木) 00:07:48.71ID:ngphL2uD
何見てるかわからんがヘッダファイルが本体なプロジェクトだろ
boostなんかがそう
一部.cpp必要なコンポーネントあるが
0634デフォルトの名無しさん2014/10/16(木) 00:35:35.47ID:v/vdzyZm
.hにclassのメンバ変数が書かれているのかな。
include先の.cppをコンパイルするたびに毎度毎度
その.hに書かれた処理がコンパイルされるんだろうか。。
0635デフォルトの名無しさん2014/10/16(木) 01:32:31.88ID:UUyeR/ZQ
>>634
pimplイディオムとか特殊な事しないかぎりclassのメンバー変数は.hに書くだろ…
0636デフォルトの名無しさん2014/10/16(木) 01:56:51.82ID:jyM9qn0X
名前はしらないが完成品のソースで全体のビルドにかかる時間を短縮する手法だ
0637デフォルトの名無しさん2014/10/16(木) 04:20:29.46ID:fYyW3P4N
VC++の、Afx ヘッダーみたいに、
プリコンパイル済みヘッダーでも作る、やり方なのかな?
0638デフォルトの名無しさん2014/10/16(木) 21:29:14.55ID:prpAHb+A
>>615
assertは*.hに#define NDEBUGと書くと全滅する
0639デフォルトの名無しさん2014/10/16(木) 21:46:59.52ID:6zTGqYum
>>615
assert はバグ(=起きてはならないこと)を引っ掛けるため
例外はバグ以外の環境や操作ミスで起きる不都合(=避けられないこと)を回避するため
0640デフォルトの名無しさん2014/10/17(金) 00:06:36.79ID:xsdfhOV6
exchangeサーバってcmdから操作できる?
フォルダ構成とか
0641デフォルトの名無しさん2014/10/18(土) 22:41:02.04ID:olwWpAy+
ベクターから配列に変えたら速すぎなんだが
何故だ?
0642デフォルトの名無しさん2014/10/18(土) 22:56:36.20ID:jXLG/4NX
最適化を有効にしていないかvectorの正しい使い方をしていないか
0643デフォルトの名無しさん2014/10/18(土) 23:58:56.82ID:olwWpAy+
>>642
forのなかで要素を取り出したり書き込んだりしてるだけなんだが最適化とかあるのか?
5倍くらい速くなった、ベクターが配列を基に作られてるのが原因?
0644デフォルトの名無しさん2014/10/19(日) 00:03:01.26ID:c/fNN/TF
[]でもデバッグじゃ配列の範囲外にアクセスしてないか見てるぞ
0645デフォルトの名無しさん2014/10/19(日) 00:43:55.56ID:2zyUx+2N
コンパイラの最適化が有効だとたいていのクラスのメンバ関数はインライン展開されて関数呼び出しのオーバーヘッドが消える
0646デフォルトの名無しさん2014/10/19(日) 01:55:35.58ID:NJ9o05Xa
・デバッグビルドしている、最適化なしにしている
・配列はスタックに取っていて確保を何度も行ってかつその部分まで計測している。

何にせよその5倍速くなったというコードを晒さないと何とも言えん
0647デフォルトの名無しさん2014/10/19(日) 02:54:14.71ID:cw5JQu3z
サイズが既知で領域がスタック上に確保されるなら普通の配列のほうが早くなりそうだけど数倍はない
0648デフォルトの名無しさん2014/10/19(日) 03:15:49.52ID:NJ9o05Xa
>>647
計測してみた?
コンストラクタの無い型ならスタックから確保するのはスタックポインタ進めるだけだからヒープから取るより数倍どころじゃなく速いぞ
0649デフォルトの名無しさん2014/10/19(日) 03:50:12.58ID:c/fNN/TF
スタックには限りがあるしなぁ
0650デフォルトの名無しさん2014/10/19(日) 05:39:14.13ID:QL0HQqvq
>>643
そのvectorと配列は本当に同じ処理をしてるコードなのか気になる
まさかvectorはサイズ指定もresize(),reserve()もせずに大量にpush_back()してて、
配列は最初に一括で確保してる…なんてオチじゃないよな
0651デフォルトの名無しさん2014/10/19(日) 06:34:16.03ID:B5OPr43G
operator[]じゃなくてイテレータ使うとか
サイズが決まってんならstd::arrayの方がいいかと
0652デフォルトの名無しさん2014/10/19(日) 16:52:49.49ID:nWUCBVo3
などとエスパー合戦になるのでコードはよ
0653デフォルトの名無しさん2014/10/19(日) 17:16:06.78ID:M9SKsKvj
>>632です
セルフ回答ですが、
調べたところ、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:Me0fGpTz
>>643です
vector http://codepad.org/oeUREsic
約0.0010秒

配列 http://codepad.org/EslbtY9s
約0.00011秒

ふぇぇぇなんでだよぅ自分のPCより差が出てるよぉ
0655デフォルトの名無しさん2014/10/19(日) 21:46:18.06ID:cPpgakZM
>>654
今試しに私の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:cPpgakZM
つーか、根本的にもっと早くなるコードなんだがこれ以上差が出せないな。そもそもなんでl/mなんだか。
clock()使わないで、gettimeofday()でも使って、ループ回数を固定して実測してみたらどうだ?

それはさて、二乗を乗算に書き換えてCPUがx86なら実数演算をsseにやらせるようにすると目に見えて速くなるぞw
0657デフォルトの名無しさん2014/10/19(日) 22:47:01.78ID:Me0fGpTz
>>656
l/mなのはnを増やした時の計算時間を知りたかったからなんだ
あと、Linux使ってる?
調べてみたが
clock()はwinとlinuxでは何かが違うらしい
あとgettimeofday()はlinux専用みたいだ
0658デフォルトの名無しさん2014/10/19(日) 22:50:24.78ID:Me0fGpTz
>>656
sseはちょっと調べてみる

ちなみにvisual studio使ってるから裏で何かやってくれてるのかも
0659デフォルトの名無しさん2014/10/19(日) 23:30:58.51ID:B5OPr43G
std::chronoを使おう
0660デフォルトの名無しさん2014/10/19(日) 23:54:18.00ID:c/fNN/TF
ttp://codepad.org/VlCY6qM4
vector 0.068
配列 0.070
VS2013 32bit Releaseバイナリ
Corei5 4460
当たり前だけど余り差は出なかったな
0661デフォルトの名無しさん2014/10/20(月) 00:05:25.32ID:KSjZih3d
>>658
VC++なら設定によってはコンテナのイテレータの範囲チェックを行うのでそのときはその分遅くなる
ttp://msdn.microsoft.com/ja-jp/library/aa985965.aspx
0662デフォルトの名無しさん2014/10/20(月) 00:24:56.19ID:KSjZih3d
それと言っとくと>>654の配列版の
delete[] data1,data2;
は
(delete[] data1) , (data2);
であって解放されるのはdata1だけだからな

ttp://ideone.com/FFgcy5
0663デフォルトの名無しさん2014/10/20(月) 00:48:30.18ID:ue6UcWSy
http://codepad.org/about
codepadの最適化レベルは-O1
…ってかコンパイラ古すぎじゃね?
0664デフォルトの名無しさん2014/10/20(月) 09:00:37.21ID:nHn9rVxH
最適化されてるはずだけどdata1[ij],data2[i]はリファレンスにしたら
0665デフォルトの名無しさん2014/10/20(月) 19:04:12.00ID:cRmJ92uN
CentOS5の頃の奴だな
手元の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/f8er
コンパイルオプションに-O3付けるのとメモリ管理を自分でやるのでてんびんにかけて楽な方を選択すればいいんじゃない?
0668デフォルトの名無しさん2014/10/20(月) 21:18:41.31ID:e1ZIgcc9
>>666
逆に考えるんだ。
コンパイラが勝手に速くしてくれるんだから、人間は楽な方を使うんだ。
0669デフォルトの名無しさん2014/10/20(月) 21:49:25.94ID:xbA0pS9k
高価なインテルコンパイラだと速くなるのかな?
0670デフォルトの名無しさん2014/10/21(火) 03:40:13.94ID:spR4uLWz
>>666
やりたい事を明記しなさい
0671デフォルトの名無しさん2014/10/21(火) 05:44:41.14ID:w5FgyNfx
>>669
結構凄いコードを吐くよ。
特に、avx対応コードで4並列に超越関数を演算しちゃうとか。
0672デフォルトの名無しさん2014/10/21(火) 19:11:03.84ID:9kJQNkb/
>>670
Visual studioで数値計算を高速化したいけどどんなテクニックがあるのかも知らないし、そもそもコンパイルについての知識もないから勉強したいなぁと
あと最適化、SSEについても
0673デフォルトの名無しさん2014/10/22(水) 11:37:27.80ID:L59YbXQz
>>671
レス、サンクス
最近のCPUはそれ自体が小さなベクトル型スパコンみたいなものですね
コンパイラのユーザーズ・ガイドを少し眺めてみたけど、最適化オプションはかなり奥が深そう‥
将来インテルの石でPCを組んだら無償お試し版で遊んでみたいなぁ
0674デフォルトの名無しさん2014/10/22(水) 13:25:18.21ID:f7evsStm
>>673
iccに頼らなくても、gccでも並列演算できなくはないよ。
コンパイラが勝手にやってくれるのと、自分でちまちま書くのとでは勝手が全く違うけどね。
0675デフォルトの名無しさん2014/10/24(金) 12:34:54.94ID:+Tkev7fd
http://openframeworks.jp/tutorials/firstSteps/003_ooops_object_oriented_programming.html
このサイトの「クラスからオブジェクトを生成する - パート3」
で「*」ポインタをつける必要が出てきたとあるんですが、
理屈がよくわかりません。
納得はいかないですがそういうものとして覚えておけばいいんでしょうか、、。
0676デフォルトの名無しさん2014/10/24(金) 12:55:30.23ID:JJZzpP2b
>>675
どこにそんな文がある?意訳?
0677デフォルトの名無しさん2014/10/24(金) 13:00:21.51ID:2cfKwGQJ
>>675
パート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
>>677
なるほどそういうことか〜あざざっす。
newでインスタンス→ポインタ保持ってところ、
わかりやすいサイト探してみます。
0681デフォルトの名無しさん2014/10/24(金) 13:16:28.28ID:+Tkev7fd
>>678
フォローありがとございます〜

>>680
アドバイスありがとうございます。


変数もメモリに領域つくってるんでは?って思ってしまうんですが違うんですかね。
なんか必要性ってところで???となってしまいます。
0682デフォルトの名無しさん2014/10/24(金) 13:18:23.81ID:SG4ZH+p9
>>675
コンストラクタの変更とnewで生成する事は何の関係もない。

> このチュートリアルは、openFrameworksでオブジェクト指向プログラミングをするための簡単なイントロダクションと、自分のクラスを作成するためのHowToガイドです。
とあるので、openFrameworksではオブジェクトはnewして生成する流儀なのかも知れない。
openFrameworksつかってプログラミングする目的でない(OOPS入門として読む)ならば、そのページはうんこと断言して良い。
見なかった事にして忘れてしまえ。
0683デフォルトの名無しさん2014/10/24(金) 14:19:17.13ID:2cfKwGQJ
>>675=681
私も>682に同意。
C++のプログラミングとOOPの入門は別と思った方がいいと思う。
0684デフォルトの名無しさん2014/10/24(金) 14:23:53.88ID:7uisWKAt
>>683
そう?
デザパタ本なんか見ると
言語問わず似たりよったりだけどねぇ
0685デフォルトの名無しさん2014/10/25(土) 04:55:43.73ID:b4QQd40Z
C++で日本語対応ってどうやってるの?
文字コードや文字セットはシステム側が提供するものを利用するか、
ttfファイルとかをパースする(?)のかと思うんだけど。具体的な方法がわからん(´・ω・`)
0686デフォルトの名無しさん2014/10/25(土) 06:05:25.04ID:dFV7jCVh
std::cout << "日本語" << std::endl;ってやったら日本語が出るだろ
0687デフォルトの名無しさん2014/10/25(土) 06:41:17.06ID:BH5UYxje
アプリ内部でつかうエンコーディングはプラットフォームに依存せずに決めといた方がいいぞ、UTF-8とかUTF-16とかに。
プラットフォーム固有のAPIに渡す直前に必要に応じて変換
0688デフォルトの名無しさん2014/10/25(土) 06:42:36.98ID:s5oEimPT
>>685
ttfとか言う辺りGUIでの日本語のことだと思うけど、C++にはGUI関連の機能自体が存在しない。
GUI関連は環境に合わせてライブラリなりAPIなりを持ってきて使うのでそちらの対応状況次第。
日本語非対応のAPI上で日本語扱う場合は、別途フォントエンジンを用意したりする。FreeType等。

只の文字データとしてなら、ロケールの対応範囲内でマルチバイト文字もワイド文字も扱える。
使用可能ロケールは環境依存なので、それ以外も扱う場合は別途ライブラリを用意したりする。libiconv等。
0689デフォルトの名無しさん2014/10/25(土) 06:54:35.09ID:b4QQd40Z
>>687
アプリケーションでエンコーディングするのに確立した方法があれば教えて(人・∀・)
あとそのAPI(システム・コール)とかある?
0690デフォルトの名無しさん2014/10/25(土) 06:55:32.80ID:b4QQd40Z
>>688
ありがとうm(__)m
そのlibiconvとやらを漁ってみます。
0691デフォルトの名無しさん2014/10/25(土) 09:38:59.85ID:s5oEimPT
>>690
C99準拠のsetlocale、wcstombs、mbstowcsでも一応は変換できるよ。

文字コードの方でよかったのか…なんでttfが関係すると思ったんだw
0692デフォルトの名無しさん2014/10/25(土) 12:31:43.72ID:Dq9yc316
書き込み時刻から察しろ
0693デフォルトの名無しさん2014/10/25(土) 13:53:07.26ID:zmlgvAXz
I/Oの時に変換するかな
ファイルI/O、ネットワークI/O
MBCSはいろいろと問題起こるから、基本wchar_t、wstring
0694デフォルトの名無しさん2014/10/25(土) 14:36:05.45ID:B/NlI7do
MBCSがUTF8だったら良かったのにね
0695デフォルトの名無しさん2014/10/25(土) 15:48:14.08ID:pojaJUJ1
Visual Studio Express 2013でコンパイルした時、実行すると代入のところでアクセス違反と出てクラッシュします
が、このコードのどこが悪いのでしょうか
http://codepad.org/8z4kZV7q
0696デフォルトの名無しさん2014/10/25(土) 17:13:33.60ID:Gk5MgQ3X
C言語でつまずいたのでご教授ください。
#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
>>695
よく分からんけど、とりあえずアクセスしているアドレスを
確認してみては?
http://codepad.org/fvM6zFXS
0698デフォルトの名無しさん2014/10/25(土) 17:16:50.14ID:FadhVfwr
>>696
> int num[]={0}
100?
あふれちゃう
0699デフォルトの名無しさん2014/10/25(土) 17:20:12.82ID:USuaOmn0
>>696
一周目でも終了しないことがある?
よくわからんが、3行目を int num[10000]={0}; i=0; j=0; として解決するなら
buffer overflow だろう
0700デフォルトの名無しさん2014/10/25(土) 17:24:17.75ID:Gk5MgQ3X
>>698
ありがとうございます。初歩的なミスでしたね、申し訳ない
0701デフォルトの名無しさん2014/10/25(土) 17:27:55.97ID:FadhVfwr
ま、それでも
101回めに100を入力しなければ抜けないから
問題あるんだけどね
0702デフォルトの名無しさん2014/10/25(土) 17:29:20.54ID:FadhVfwr
100回めに100か
すまん
0703デフォルトの名無しさん2014/10/25(土) 17:30:36.92ID:YY79eQIk
101回目のプログラマー
0704デフォルトの名無しさん2014/10/25(土) 19:16:47.25ID:RdqY+Ee3
101回目のコンパイル(´・ω・`)
0705デフォルトの名無しさん2014/10/25(土) 19:47:32.79ID:zmlgvAXz
普通に100入力したらすぐ抜けるやん
なんで>>701-702と思ったのか興味ある
0706デフォルトの名無しさん2014/10/25(土) 19:54:04.48ID:TLDzyjRn
101回目のプラグマ
0707デフォルトの名無しさん2014/10/25(土) 19:59:41.81ID:PupOMkEO
>>705
いやいや、範囲外アクセスする可能性の残る
プログラムという話だろう
0708デフォルトの名無しさん2014/10/25(土) 22:19:28.90ID:pojaJUJ1
>>697のコードで出力した結果は

&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
>>698>>701-702
溢れたってのは合ってるだろうけど、「値が100個」じゃなくて「100という値」だぞ。
>>705
「100という値」を「値が100個」と誤解したっぽいところまではわかるけどその先が謎くて興味深いね。
>>708
コンパイラのバグな可能性もあるけど俺にはわからないのでC++の偉い人にお任せしたい。
0710デフォルトの名無しさん2014/10/26(日) 05:43:50.40ID:9iGJ9Vz2
>>705
誤解しただけだよ
何故誤解したのかといえば
分からないとしか言いようがない
0711デフォルトの名無しさん2014/10/26(日) 11:48:15.55ID:OKY31X3r
モダンC言語プログラミングという本の、stateパターンの実装のところで

typedef 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/W5N
_State*を返す関数ポインタ
0713デフォルトの名無しさん2014/10/26(日) 12:45:51.44ID:OKY31X3r
>>712
返り値がポインタってことか。ありがとうございます
0714デフォルトの名無しさん2014/10/26(日) 13:15:25.63ID:IyPNYi4j
モダンC言語プログラミングってタイトルの本にまず突っ込みたくなるな
0715デフォルトの名無しさん2014/10/26(日) 13:30:50.51ID:eoLX8RNk
>>711
そこでちょん切るな、その頭のアスタリスクは struct _State * の * だから
const struct _State *(*stop)(const struct _State *pThis);
全体で
stop は関数のポインタ、その引数は struct _State *、返り値は struct _State * 。
0716デフォルトの名無しさん2014/10/26(日) 22:41:16.50ID:2UzQ9MnU
visual studio でのビルドについて質問です
boostを使ったコードをコード生成の設定をマルチスレッドにしてビルドしたいのですが、リンクエラーになってしまいます

マルチスレッドdllだとビルドは成功しますが、他のpcでもプログラムを使用したいのでマルチスレッドに設定してビルドしたいのです
どうすればいいでしょうか?
0717デフォルトの名無しさん2014/10/26(日) 22:44:30.13ID:NHig/W5N
boostのビルドで runtime-link=static を付ける
0718デフォルトの名無しさん2014/10/26(日) 22:44:52.32ID:USY7r1W5
boost自体望みの設定でビルドし直してみれ
たしかバイナリ配布では全部のビルド設定網羅しているわけではなかったはず
0719デフォルトの名無しさん2014/10/27(月) 19:48:59.26ID:+HXmgeNl
さっそくaddress-model=64 runtime-link=staticでビルドし直しましたが、リンクエラーがたくさん出てきました
静的リンクの場合はどのライブラリディレクトリを使えば良いのでしょう?
0720デフォルトの名無しさん2014/10/27(月) 19:53:41.77ID:SHa9u56N
エラーの内容を張れよ
内容でどの設定のライブラリとリンクしようとしているかわかるだろうに
なんでどいつもこいつもエラーの内容を隠したがるんだ
0721デフォルトの名無しさん2014/10/27(月) 20:00:32.39ID:OMJ9cTFb
坊やだからさ。
0722デフォルトの名無しさん2014/10/27(月) 20:36:55.38ID:USt2EpFv
ソースファイル名はtest.cppです
エラーが多すぎて全ては貼れそうにないのでエラーの一部です

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:jqalzcj4
使ってるライブラリはboostだけか?
boostでデバッグ版のlibも作ったか?
0725デフォルトの名無しさん2014/10/27(月) 20:50:09.36ID:USt2EpFv
一部だと分からないかもしれないのでアップローダにアップしました
http://codepad.org/jP3gQ9dp
0726デフォルトの名無しさん2014/10/27(月) 20:51:41.63ID:USt2EpFv
>>724
eigenも使っています
デバッグ版はオプションで指定するのでしょうか?
0727デフォルトの名無しさん2014/10/27(月) 20:53:52.42ID:jqalzcj4
/MTdを指定しているか?
0728デフォルトの名無しさん2014/10/27(月) 20:56:50.75ID:USt2EpFv
>>727
/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
>>730
クリームしてなかったので混在してしまいあの競合エラーという分けですか、なるほど
0732デフォルトの名無しさん2014/10/28(火) 07:20:08.73ID:4+xiP14a
混在クリームうまそう w
0733デフォルトの名無しさん2014/10/28(火) 09:49:40.37ID:XK3wSZjJ
ぐちゃぐちゃだな
libc/msvcrt、release/debug
全部統一しろよボケ
0734デフォルトの名無しさん2014/10/30(木) 22:08:36.92ID:xQhnjzo9
ターゲットがWindows、出力ソースがC++の字句/構文解析器を探しているのですが、何かお勧めがありましたら、教えてください。
(取り敢えず調べた結果)
ANTLR 3 → 出力してもコンパイルが通らないソースが吐き出される
ANTLR 4 → まだC++がサポートされていません。(Wikipediaだと対応しているような事が書いてあるけど、英文だと「まだだよ」と明記)
flex/YACC → 現状の最終候補。 LALRで書きやすいけど、エントリポイントから始まるマクロ周りが面倒くさい
Kareidoscope → よくよく調べたらC++の自作構文解析器(clangのチュートリアル)
なんで市販品もないんだろう、と昔から思うんだ。

もうxmlliteとか、自作構文解析器とか、もう嫌なんだ。
0735デフォルトの名無しさん2014/10/30(木) 22:11:07.19ID:P+CVnAvq
parser generator caper
0736デフォルトの名無しさん2014/10/30(木) 22:29:15.01ID:yXSIxH7q
boost::spirit::qiは?
0737デフォルトの名無しさん2014/10/30(木) 22:42:06.30ID:P+CVnAvq
初心者にはムズすぎ
0738デフォルトの名無しさん2014/10/31(金) 15:26:37.90ID:zWE6Wm7I
boost::xpressive
BNF完璧に実現できる
自己参照再帰、相互参照
0739デフォルトの名無しさん2014/10/31(金) 15:29:35.46ID:zWE6Wm7I
自分で作るのがいやなんか
そりゃ気にいるの探せ
0740デフォルトの名無しさん2014/11/01(土) 16:49:44.50ID:K52d2Agm
右辺値参照がよくわからんのですが、
// int X(){return 0;} があるとして、
int&amp; a = X(); // コンパイルエラー
int&amp;&amp; b = X(); // OK (ここまでは納得)
int&amp; c = b; // これがOKなのは、どういう理屈なんでしょうか?
0741デフォルトの名無しさん2014/11/01(土) 16:55:32.29ID:kactCSG0
右辺値参照は作った後は左辺値になってしまうんじゃよ
0742デフォルトの名無しさん2014/11/01(土) 17:17:08.40ID:K52d2Agm
なんと!超納得しました。
右辺値参照で渡された引数を他の関数に渡すときに move なり forward が明示的に要るのもそのためなんすね。
07437342014/11/02(日) 11:41:23.60ID:e1EY+Kds
ブーストは構文規則をc++で書くからキツイ。bnfで書かせて欲しい
カペルはまだ使ってないから試してみます
といいながら、構文解析器生成系を自作し始めた

取り敢えずLL(k)、字句に縛りを入れて作っている
車輪を作るために、金型を作り始めている気分
0744デフォルトの名無しさん2014/11/03(月) 09:01:52.06ID:9+SOrZDL
配列ってメモリに連続的に配置されるそうですね
メモリ2枚刺しのpcで、配列をメモリ2枚にわたって使う時何か影響はありますか?
0745デフォルトの名無しさん2014/11/03(月) 09:04:49.19ID:wj4A8VFW
いいえ
0746デフォルトの名無しさん2014/11/03(月) 09:50:58.64ID:9+SOrZDL
ありがとう
0747デフォルトの名無しさん2014/11/03(月) 12:25:08.27ID:TUb68F1+
>>744
>配列ってメモリに連続的に配置されるそうですね
論理的(プログラムから見たアドレス空間上)は連続して格納されますが
物理的(チップやメモリ・モジュール上)は連続して格納されるとは限りません。
インターリーブと呼ばれるメモリへのアクセスを高速化する技術があるためです。
というか最近の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
>>747
物理的に連続とは限らないのか、ふむふむ
0749名前は開発中のものです。2014/11/03(月) 15:15:46.09ID:Ln7zQd5e
配列の要素数を求めるのに良く使う定番のマクロって
なんか落とし穴があるんだっけ?
どこかで読んだ記憶があるのだが具体的な内容を忘れてしまった
0750デフォルトの名無しさん2014/11/03(月) 15:19:40.73ID:f1DnjkKs
_countof()の事?
0751デフォルトの名無しさん2014/11/03(月) 15:35:58.10ID:TUb68F1+
>>748
で、さらにさらに言いますと。
もし仮想アドレス空間を提供する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
>>748
プログラムから見て連続したアドレスに配置されればいい
大抵仮想メモリをサポートしているから仮想アドレスが連続してればOK
747が書いた技術とはな〜んも関係無い
仮想メモリと高速化を一緒にしちゃいかん
0753デフォルトの名無しさん2014/11/03(月) 15:50:15.48ID:L63Nb35F
>>749
落とし穴ではないけど、たまに見かけるこれとか?

関数(int a[10])
{
… _countof(a) …
}
0754デフォルトの名無しさん2014/11/03(月) 16:17:41.46ID:vIAe3tjG
>>749
_countofマクロの落とし穴といえばポインタのことだろう。
_countofマクロに配列ではなくポインタを渡すと誤った値が生成される
0755デフォルトの名無しさん2014/11/03(月) 16:19:51.78ID:wj4A8VFW
VSの_countofならポインタ突っ込んだらコンパイルエラーになる
0756デフォルトの名無しさん2014/11/03(月) 17:07:01.24ID:gzxZLKcA
cやc++の配列は使っていて未だに混乱する。今では殆どvectorを使うように
している。
0757名前は開発中のものです。2014/11/03(月) 20:11:02.59ID:Ln7zQd5e
ポインタだったかな
構造体のパディングの都合で sizeof(array[0])が正しく
サイズを返さないことがあるとかだったような

勘違いしてるかも
0758デフォルトの名無しさん2014/11/03(月) 20:20:59.49ID:vLChkxGX
>>758
std::arrayもいいぞ
0759デフォルトの名無しさん2014/11/03(月) 21:26:14.62ID:hEttahKL
なに自分に言い聞かせてんだw
0760デフォルトの名無しさん2014/11/03(月) 22:56:26.18ID:hJid5R30
>>757
勘違いと言うか、思い違いだろ。
0761デフォルトの名無しさん2014/11/05(水) 20:58:27.04ID:zDHq5aQC
最近は高速化や低電力化のために
あえて計算ミスをする(許容する)演算器やプログラムの開発トレンドなんですってな
非可逆圧縮とかなら多少ミスってても大した問題にならないという発想らしい
0762デフォルトの名無しさん2014/11/05(水) 21:58:10.04ID:exu9r2/K
ID:L63Nb35F
オッサン、ついて行けないんだったら 知ッタカでレスすんなや
0763デフォルトの名無しさん2014/11/05(水) 22:01:56.22ID:TObpxnP7
errorと誤差の違いも分からないとは……
0764デフォルトの名無しさん2014/11/05(水) 23:19:09.09ID:+x9XCqU/
error を訳すると「誤差」
0765デフォルトの名無しさん2014/11/06(木) 09:50:18.54ID:guGhfN8S
>>762
何に対して突っ込んでいるのか全く分からんのだが…
0766デフォルトの名無しさん2014/11/08(土) 17:46:00.86ID:j3tDfl0T
知ったかというよりは、長文をうまく読めずに明後日の方向に突っ込みを入れてるだけだしな
0767デフォルトの名無しさん2014/11/08(土) 20:09:04.23ID:qgntwRxe
仮想アドレスでデータが連続していれば物理メモリ上でも連続と確信してるみたいだからな ページングの考えを知らないんだろう
0768デフォルトの名無しさん2014/11/08(土) 20:33:33.98ID:om46DDyf
仮想アドレスで連続してれば「実用上はOK」って言ってるだけなら問題ないんじゃないの?
そして単一の配列は仮想アドレスで連続するのでOK、物理配置とか知ったこっちゃねぇ、と。
0769デフォルトの名無しさん2014/11/08(土) 21:14:40.24ID:qgntwRxe
744は物理デバイス上のデータの連続性に関わる質問だろ
自分勝手に「実用上」とか前提条件をすり替えていちゃ回答にならない
0770デフォルトの名無しさん2014/11/08(土) 22:57:32.68ID:/FoPAlKV
勝手に前提条件作っててワロタ
0771デフォルトの名無しさん2014/11/09(日) 01:41:14.23ID:Xu5ysykw
>>769
いまどきのメモリではどっちみち、連続配置しないけどな。
0772デフォルトの名無しさん2014/11/09(日) 09:38:16.91ID:4XuJgnqb
だな。
ハードでインプリしとるのに、仮想アドレスが連続してればOK、とかワケ分からんわw
何がOKなんだ!と小1時間(ry
0773デフォルトの名無しさん2014/11/09(日) 10:52:55.54ID:q0q68Vhk
>>769
752(念のため言うけど俺じゃないよ)が全く回答になってねぇってのは同感だけど、
それで767みたいな解釈はもっと斜め上だろ。回答になってない奴に変な濡れ衣着せてるだけにしか見えん。
>>770
そもそも質問の時点で連続配置って前提がおかしいからな、これ。
0774デフォルトの名無しさん2014/11/09(日) 11:50:33.60ID:xhFguqYP
744は初心者が、単なるc言語の配列が仮想アドレス上に連続して確保されると言う話で、
pcにメモリモジュール2つさしたら、容量的に2枚に跨がるような大きい配列を作ることができるかと確認しているだけな気がするが。
0775デフォルトの名無しさん2014/11/09(日) 13:12:23.62ID:T8NGFKFe
動的計画法で計算するときに使う変数名をよくdpにしているのを見ますが
入っているデータがなんなのかが全く分からない変数名で気持ち悪くないんでしょうか
0776デフォルトの名無しさん2014/11/09(日) 14:07:52.70ID:dwdWovit
いちいち長い変数を名づけるのも書くのもめんどくさいし、長ければいいというものでもないし
0777デフォルトの名無しさん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:dwdWovit
this->つければいいだけだし‥
0780デフォルトの名無しさん2014/11/09(日) 15:46:02.44ID:Bt9f9JFw
コンストラクタの引数名とメンバー変数名
が全く同じでもビルド出来るので実害は無いけれど、何と無く嫌なので
this->hensu=hensu_
みたいな余分な_を付ける私は心配性
ですか?本当は付けたく無いんですが。
_付きの変数って見た目が変ですよね。
髭が生えているというか鼻毛が伸びているというか不潔な感じ。
0781デフォルトの名無しさん2014/11/09(日) 20:55:17.16ID:a0MM04w4
class Hoge; // operator new が定義されているクラス
Hoge* 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:a0MM04w4
あ、delete から呼び出される operator delete は operator new と当然対応しているとして。
0783デフォルトの名無しさん2014/11/09(日) 21:21:00.60ID:cg8/k+y/
>>781
boost::in_placeとか使えば
0784デフォルトの名無しさん2014/11/09(日) 21:36:43.66ID:tM1v0fJH
>>781
> 領域確保した上でコンストラクタの呼び出しを遅延させたいんですが…。
そういうことをやりたければC++でもmalloc/freeで領域確保する

> 通常のnewで取得していないものを通常のdeleteに渡す辺りとか。
まわりまわって最終的にメモリ確保と解放の対応が正しければ問題にならなかったりするけど
基本的には問題ありでNG
0785デフォルトの名無しさん2014/11/09(日) 22:12:05.36ID:a0MM04w4
>>783 調べてみます。
>>784 通常のdeleteで削除する部分が諸事情で変更できないので、難しそうっすね。ともあれNGコードは避けときます。
あざーす
0786デフォルトの名無しさん2014/11/10(月) 03:46:28.21ID:x8aX3rE8
>>784
>基本的には問題ありでNG
この部分よくわからない、new と delete が対になっておればなんら問題ないはず?
なんで NG なんだ?
0787デフォルトの名無しさん2014/11/10(月) 09:59:35.70ID:e6eP1AW5
スマポ使おうってことじゃ
0788デフォルトの名無しさん2014/11/10(月) 10:21:56.54ID:5fw2t1kv
そもそも規格レベルで厳密にいうならnew式で確保したわけではないポインタをdelete式で使えば未定義動作

5.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
>>788
>>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:8QediavH
おい、バイト単位なんてどこのだれが言い出したんだ!
0792デフォルトの名無しさん2014/11/10(月) 18:06:53.74ID:tFlOeqoP
質問です:

void f (void (A::*)() const &amp;) {}

は、関数f の定義らしいのですが、引数の型が良く分かりません。
どういうことでしょう。

そもそも、定義だとすると、引数には型だけでなく、仮引数名が必要のはずですが、
それも省略されているように思えます。コンパイラによっては、関数定義内部で使わ
ない引数は、仮引数名を書いておくと警告が出てしまうので、仮引数名を省略することに
よって回避できるようですが。

A::* は、メンバへのポインタのようです。

const &amp; の部分が一番分かりません。(A::*) の部分は、関数へのポインタのように思え、
その次の()は、その関数の引数の括弧で引数が無い場合のもののようです。その次に
const だけなら理解可能ですが、さらに &amp; となるとこんなものは無い様に思えます。
0793デフォルトの名無しさん2014/11/10(月) 18:09:51.53ID:tFlOeqoP
「&amp;」の部分は、単に半角の「&」です。
単に「&」を書いたのですが、投稿時にこうなってしまったようです。
0794デフォルトの名無しさん2014/11/10(月) 18:16:10.85ID:tFlOeqoP
もしかすると、

void (*&rpFunc)() const を
void (*)() const &rpFunc

と書く記法でもありましたでしょうか??
0795デフォルトの名無しさん2014/11/10(月) 18:22:12.55ID:H0dF1SvN
constメンバ関数なんじゃね
0796デフォルトの名無しさん2014/11/10(月) 18:26:18.54ID:tFlOeqoP
>>795
void (A::*)() const
であればそうでしょうが、実際は、
void (A::*)() const &

のように、最後に&が付いてます。
0797デフォルトの名無しさん2014/11/10(月) 18:30:58.08ID:hfbf+gmf
揚げ足取りというか重箱の隅を突きまくって、後付け講釈で粘着する奴がいるな
いい加減に他所でやれ
0798デフォルトの名無しさん2014/11/10(月) 18:37:05.73ID:tFlOeqoP
最近のC++の仕様で、

class A {
 void func1() const &;
};

というようなメンバ関数 func1() を記述できるとすれば理解可能ですが。
0799デフォルトの名無しさん2014/11/10(月) 18:44:07.22ID:tFlOeqoP
>>798 で正しいようです。

「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
>>791
仮想アドレス以外連続する保障がなくて、連続しないものを全部数え上げたらバイトも入ったってだけじゃね?
ビット単位、バイト単位、チップ単位、モジュール単位、物理アドレス、仮想アドレス、連続するのは仮想だけ。
0801デフォルトの名無しさん2014/11/11(火) 10:08:04.62ID:6g8qZa7F
これが駄目なのはどうして
http://codepad.org/OkeujLvX
this->が付いた時点で関数ポインタにはもう戻せないんですか
0802デフォルトの名無しさん2014/11/11(火) 10:12:02.23ID:6g8qZa7F
ごめん関数ポインタのtypedefが間違えてた...
0803デフォルトの名無しさん2014/11/12(水) 09:26:17.12ID:+hAxVh0F
仮想関数テーブルについてですが:
http://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:F2eOZHeQ
そんな実装によって変わるものをいちいち調べてどうしたいんだ?
0806デフォルトの名無しさん2014/11/12(水) 10:02:55.65ID:+hAxVh0F
コンパイラ関係ツールを作成するため。
0807デフォルトの名無しさん2014/11/12(水) 12:10:45.75ID:Z7AJFaDD
自分でコンパイラを作るのなら自分で決めればいい。
既存のコンパイラの出力結果に何かしたいのなら
それに合わせないといけない。

Wikipediaは履歴を見れば分かるけど日本語版は英語版の
2008年前半頃のままっぽい。
英語版でも過去には「+0」と記述されている。
結局は自分で調べるしかないと思う。
0808デフォルトの名無しさん2014/11/12(水) 13:10:18.81ID:XEt4RGec
Bのポインタに対してBのvtblを見て
Dのポインタに対してDのvtblを見るならそれで足りるんじゃないの
0809デフォルトの名無しさん2014/11/13(木) 21:05:08.87ID:5RyPxF5Z
>>808
?
0810デフォルトの名無しさん2014/11/14(金) 16:38:56.33ID:y3t1ubsg
>>807
やはり何かの間違いかもしれませんね。

狂いが生じている理由について、
「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:UbygtGe4
英語版でもInvocationでは+0で扱ってるんだから素直に記事修正のミス・不徹底だろ
0812デフォルトの名無しさん2014/11/14(金) 23:20:09.48ID:vEy7KEZr
「Invocation」って何のことですか?

辞書的にはいくつか意味がありますが、そのうちの

「〔権威あるものに対する〕嘆願、訴え」

のこと、つまり、「修正要請」のことですか?
0813デフォルトの名無しさん2014/11/15(土) 00:20:36.40ID:jAtUM3ml
英語版での話も出てるのに英語版の仮想関数テーブルのページ読んでないのか
0814デフォルトの名無しさん2014/11/15(土) 17:09:11.92ID:EFct/v5k
>>812
呼び出すとか起動する、の invoke 名詞化
ttp://codic.jp/entries/invoke
0815デフォルトの名無しさん2014/11/17(月) 23:42:34.25ID:LwbKAExF
>>813-814 なるほど。そっちの事でしたか。

>>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
gdgdと
他人任せにせず自分で改訂しろよ
そのためにwikipediaだろ
0817デフォルトの名無しさん2014/11/18(火) 23:23:49.07ID:AfINYphq
>>816
Wikipediaがなければ、今頃 gcc の vtable について書かれた書籍でもあった
かも知れないのに、Wikipediaがあることによって書籍を出版することが出来
なくなってしまっている可能性がある。
つまり、Wikipediaに書く人がいればいるほど、良質の情報源が減る可能性
がある。
0818デフォルトの名無しさん2014/11/18(火) 23:27:30.77ID:oZpUE+lI
wikipedia以下の書籍なんて存在する価値ないから
問題ない
0819デフォルトの名無しさん2014/11/19(水) 00:38:36.69ID:lnFQGeQL
>>817
wikipedia無かったら質が下がると思うが
0820デフォルトの名無しさん2014/11/19(水) 01:10:00.51ID:Z4qTxOUt
>>819
心配しなくても、Wikipediaが存在しなかったはるか昔から、書籍の質は
高かった。

>>818
質が高くても、現実には売り上げが減るかも知れないんだよ。
0821デフォルトの名無しさん2014/11/19(水) 02:50:47.75ID:uIresU5p
gccのソース読めよ。なんのためのオープンソースだよ。
0822デフォルトの名無しさん2014/11/19(水) 21:23:57.97ID:dkgYBCwc
>>820
糞みたいな本多いじゃん
0823デフォルトの名無しさん2014/11/19(水) 22:53:15.93ID:QB/q/+7G
wikipediaって、そんなに良質でもないじゃん。
更新されない集合知は、腐るのも早い。
0824デフォルトの名無しさん2014/11/19(水) 22:59:52.26ID:QB/q/+7G
ごめん。 もう一言だけスレを汚させて。

ビューロクラットだか、記事評論家だか知らないが、
荒しの如くに「要出典」のコメントだけ付けて訂正編集しない連中が、選挙で利権を争う姿を見ていると、吐き気がするんだ。
【お前らの方が荒しだろ】って言いたかった。

スレ汚しすまん。
0825デフォルトの名無しさん2014/11/20(木) 00:24:36.16ID:TrsJQyqJ
>>824
ウィキペディアは独自研究を発表する場ではありません。
0826デフォルトの名無しさん2014/11/20(木) 08:29:57.39ID:MP59TUjQ
>>825
いやいや
そこを否定したらwiki全否定だから
0827デフォルトの名無しさん2014/11/20(木) 08:46:57.29ID:TrsJQyqJ
>>826
そこ?
ウィキペディアは何ではないか を読んで出直してこい
0828デフォルトの名無しさん2014/11/20(木) 10:24:21.11ID:pjiqM021
>>826
ウィキペディアの記事によっては、冒頭で、
「独自の研究と思われる文章が‥云々 出典を明示して下さい」みたいな注意書きが入る
0829デフォルトの名無しさん2014/11/20(木) 10:30:25.85ID:R6MHdiw+
wikiぺは、ちまたにころがってる「判明・確定していること」を一括してタグ付きにすることで事典にする、っていう感じだよね?
0830デフォルトの名無しさん2014/11/20(木) 11:10:06.13ID:3nar01e/
好き勝手書いていいのはアンサイクロペディアやで
ユーモアがないと怒られるが
0831デフォルトの名無しさん2014/11/20(木) 15:15:38.65ID:OMlJz/ud
テスト
0832デフォルトの名無しさん2014/11/20(木) 21:58:39.73ID:pv69b1+R
cuda c/c++についての質問です
syncthreadsとthreadfence_blockの違いが分かりません
syncthreadsだけで十分な気がします
0833デフォルトの名無しさん2014/11/21(金) 08:32:39.90ID:iFQePu0O
>>832
CUDAスレへどうぞ。
あなたがそれで充分だと思ったのなら、あなたには必要のない違いなのでしょう。
0834デフォルトの名無しさん2014/11/23(日) 02:13:40.97ID:ZuX0TPwi
>>830
和んだ
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:t3vESlZp
スレチ
C++/CLIのスレに行きなさい
0838デフォルトの名無しさん2014/11/24(月) 21:48:28.69ID:U0unJI5C
クラス2用の配列作っただけじゃダメで、array[0]=new クラス2()がいる
0839デフォルトの名無しさん2014/11/24(月) 22:05:59.29ID:2E7YTyCe
>>838
出来ました!
ありがとうございます、ありがとうございます!

>>837
ごめんなさい、その区分けすらわからんのです。
ちなみに unity です。
unity スレで聞くと初歩的過ぎて怒られそうだったので。
0840デフォルトの名無しさん2014/11/24(月) 22:16:33.93ID:ZSGM05eV
>>14
ん…?Unityって確か

・UnityScript: JavaScriptをベースに拡張
・Boo: Pythonをベースに(ry
・C#

の3言語じゃないっけ?ここはC/C++のスレだよ?
C#スレの誤爆?
0841デフォルトの名無しさん2014/11/24(月) 22:17:28.08ID:ZSGM05eV
ごめんアンカミス、>>839 ね
14ってどこだ俺…?
0842デフォルトの名無しさん2014/11/24(月) 22:40:50.39ID:ALHBj7yp
>>840
>>837が言ってるのはそういうことだと思うぞ
0843デフォルトの名無しさん2014/11/24(月) 23:42:17.40ID:ZSGM05eV
>>842
/CLIのスレでもスレチじゃね…って話でもあるよ
0844デフォルトの名無しさん2014/11/30(日) 21:05:49.36ID:1fWIVRzv
VS2012expressで
C++をやっていたらいつの間にか
C++/CLIの領域に踏み込んでいました。
これはMSの罠ですか?
0845デフォルトの名無しさん2014/11/30(日) 21:29:21.63ID:CJTIqzdj
>>844
そう、おっちょこちょいトラップだよ
はまった奴は君が初めてだけど w
0846デフォルトの名無しさん2014/12/03(水) 20:04:59.05ID:tn8Qtf24
うっかりscの方に書いてしまったのでこちらに書き直します

ファイル操作で開いたファイルの中身を一部削除するにはどんな関数を使えばいいのでしょうか
上書きや追記と違い中々見つからないので質問します
0847デフォルトの名無しさん2014/12/03(水) 20:14:52.34ID:U2a4HdIu
>>846
自分で読み込んで自分で加工し自分で上書きするしかない
0848デフォルトの名無しさん2014/12/03(水) 20:15:20.42ID:U2a4HdIu
ああ、メモリマップドファイルという手はあるな‥
0849デフォルトの名無しさん2014/12/03(水) 20:20:33.13ID:GXUScfW3
メモリマップドファイルって削除した部分詰めれたりするの?
0850デフォルトの名無しさん2014/12/03(水) 20:21:29.03ID:U2a4HdIu
いや、それはないな‥
08518462014/12/03(水) 20:25:58.02ID:tn8Qtf24
>>847
一度増えたビットは変更は出来ても新規で作り直さない限り減らせないのでしょうか
0852デフォルトの名無しさん2014/12/03(水) 20:34:35.50ID:o987ZOaf
Unixならtruncate
WindowsならSetEndOfFile
08538462014/12/03(水) 20:39:45.34ID:tn8Qtf24
>>852
truncate、まさに探していたものです!ありがとうございます
0854デフォルトの名無しさん2014/12/03(水) 21:25:20.86ID:5dbPIVbA
それは一部削除じゃなくてファイルサイズを縮めるだけだから
途中のデータを消して詰めたいのなら、やっぱり読み直して
書きなおした後で縮めないといかんです。
08558462014/12/04(木) 00:16:00.50ID:247S7oEQ
自分の環境ではtruncateは使えなかったのでfilenoとchsizeを使ったらうまく行きました
truncateを知らなければ見つけられなかったと思います。ありがとうございました
0856デフォルトの名無しさん2014/12/06(土) 00:05:51.34ID:q7blqefO
intが戻るlog_a関数ってありませんか
やりたいことは

const int SIZE=4;
int a[SIZE]; //4
int b[log_2(SIZE)]; //2

のように配列を確保することです
0857デフォルトの名無しさん2014/12/06(土) 00:10:43.84ID:iExVqmns
キャストすれば
0858デフォルトの名無しさん2014/12/06(土) 00:22:43.82ID:tAcOC+EO
>>856
http://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
>>857
キャストじゃlogの出力が3.99999みたいになったとき3になるじゃないですか
>>858
ありがとうございます
まだよく読んでないですが参考にしてみます
0860デフォルトの名無しさん2014/12/06(土) 01:59:18.66ID:K1bvfHJP
自分でconstexpr関数書けばいい
その用途向けならたいして難しくないだろう
0861デフォルトの名無しさん2014/12/06(土) 02:07:36.09ID:q7blqefO
constexprは避けて通ってきてましたがループ使えるようならそれやってみます
0862デフォルトの名無しさん2014/12/06(土) 11:49:32.16ID:u7jjfD/c
intが戻るlog_a関数を探してるのに戻りが3.99999から3になるのが嫌?とんちですか?
0863デフォルトの名無しさん2014/12/06(土) 12:15:07.99ID:pl1CQQsq
四捨五入して欲しいんじゃね?
0864デフォルトの名無しさん2014/12/06(土) 13:17:45.73ID:SX3gYLWG
領域確保に使うんだから切り上げでないとダメだろ
0865デフォルトの名無しさん2014/12/06(土) 13:42:50.79ID:BM1MQEaE
四捨五入なら0.5切り上げなら1足してintにすればええやん…
0866デフォルトの名無しさん2014/12/06(土) 13:54:13.87ID:pl1CQQsq
○○したらいいってのは女の子が嫌がる言い方やで
0867デフォルトの名無しさん2014/12/06(土) 15:54:32.51ID:s2cU1r59
>>858でlog_2はビットカウントだと指摘されてるのに延々と何を議論しているのだ?
0868デフォルトの名無しさん2014/12/06(土) 16:00:43.05ID:FWmjRtxd
>>862
その例通りだとすると、log2(16)で3が返ってきたらいやだろう
0869デフォルトの名無しさん2014/12/06(土) 19:51:04.38ID:0URk8sf5
>>866
なんでやねんどういえばいいねん?
0870デフォルトの名無しさん2014/12/06(土) 22:39:06.28ID:FKpX6QxP
それって「キミの好きなほうでいいと思うよ」的なことやろ?
0871デフォルトの名無しさん2014/12/07(日) 06:56:34.45ID:8JlYHdxZ
この子ならこうするだろうなってのを予測して当てに行って当たれば好印象やで
0872デフォルトの名無しさん2014/12/07(日) 08:31:29.57ID:68yN0EBG
>>869
○○が君にはふさわしいねって言えばいんじゃね?
0873デフォルトの名無しさん2014/12/07(日) 09:39:40.27ID:bfkTF4nN
>>862
そもそもcmathのlogって領域確保に使えなくね?
0874デフォルトの名無しさん2014/12/07(日) 13:06:03.34ID:yTMn9VdC
>>873
理由書かないと単なるバカに見えるぞ
書いてもバカのままかもしれないけど
0875デフォルトの名無しさん2014/12/07(日) 18:56:30.56ID:68yN0EBG
>>873
戻り値をどう使いたいかに依るね。
だから、「使えない」という判断は明らかな誤りだな。
明白な誤謬を犯すような人間は自分で自分を馬鹿だ
と証明したことになる。
0876デフォルトの名無しさん2014/12/08(月) 00:18:54.52ID:DldRzckq
そういう馬鹿っぽい口調も不快だからやめて欲しいです。
0877デフォルトの名無しさん2014/12/08(月) 21:41:30.45ID:g1yYihY2
C++/cli からC++のプロジェクトに定義している関数を呼び出したいんです。
C++プロジェクトのlibファイルを参照し、includeファイルをC++/cli側に
持ってきて#include すると、物凄い数のエラーがでます。

(C2011:C2079:C2504:C3395:C3699)

[1] C++/cliで参照できるよう、ビルドエラーを直すしかない

[2] 別の方法でC++の関数をビルドエラー無しに参照できる。

ちなみに、C++の関数を参照しないで自作・・・という回答は無しでお願いします。
0878デフォルトの名無しさん2014/12/08(月) 23:38:12.56ID:2IK4zUKL
くだすれC++/CLI(初心者用)part2
http://peace.2ch.net/test/read.cgi/tech/1268613679/
08798772014/12/09(火) 00:21:33.60ID:xpR1dfQS
>>878
ありがとうございます。ではそちらのスレで質問させていただきます。
0880デフォルトの名無しさん2014/12/21(日) 12:53:52.93ID:+qwmhbzu
どなたかwinでhttps://github.com/pornel/giflossyうまく作れるか試してもらえませんか
当方環境(vista 32bit)ではgifwrite.cに問題があるようでVC、bcc共にダメでした
適切なスレがあればご誘導下さい
0881デフォルトの名無しさん2014/12/21(日) 13:05:34.28ID:HpxqpUIE
>>880
http://ja.stackoverflow.com/
0882デフォルトの名無しさん2014/12/21(日) 14:14:34.29ID:S+pWOghM
日本語あったのか
0883デフォルトの名無しさん2014/12/25(木) 20:48:16.11ID:/j+MCuLw
すみません、この問題の答え大至急教えてください><

現在の地域時間から15時間後の日時を表示するプログラムを作成しなさい。
表示形式は日付と時間が表示されれば、自由とする。
0884デフォルトの名無しさん2014/12/25(木) 20:59:19.24ID:PIT60xPK
宿題スレにいけ
0885片山博文MZ ◆T6xkBnTXz7B0 2014/12/25(木) 21:03:12.54ID:gEw73of1
>>883
#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
>>885
ありがとうございました!
0887片山博文MZ ◆T6xkBnTXz7B0 2014/12/25(木) 21:38:58.78ID:gEw73of1
>>885 訂正。
×t *= 15*60*60;
○t += 15*60*60;
0888デフォルトの名無しさん2014/12/25(木) 23:08:26.83ID:2tgECDMq
>>887
いま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+SuoRH
if文の処理の重さについて質問です。入れ子状にif文を書くパターンと1行で書くパターン
if(a==1){
 if(b==1)}
  if・・・{
   〜
  }
 }
}
と
if((a==1)&&(b==1)&&(・・・{
 〜
}
って条件が2,3個だったら大して違いはなさそうな気はしますが
条件の数が多ければ多いほど上の方が軽いように思ってますけどあってますか?
0890デフォルトの名無しさん2014/12/26(金) 00:23:53.69ID:rmtyj285
time_tの実装が違うのかも。
0891デフォルトの名無しさん2014/12/26(金) 00:30:09.80ID:0K0HmtAp
>>889
環境(コンパイラ)によると思われるが(おそらく)同じ。

入れ子の場合、aが0以外なら一番外側の if(...){} の次の命令にジャンプするわけだが
1行で書いた場合も、その書き方なら a を判定し偽だったら if(...){} の次の命令にジャンプする。

つまりどちらでも偽判定になった時点で if を抜けるので結果は同じ。
0892デフォルトの名無しさん2014/12/26(金) 00:36:15.23ID:qv+SuoRH
>>891
下の方は途中の結果関係なく全部参照して真偽を見ると勝手に思っていました
ありがとうございました
0893デフォルトの名無しさん2014/12/26(金) 01:53:43.48ID:EqAHHrNc
C言語の&&,|| は短絡評価だから、使うと危ないぞ!

A && B、A || B
で、後ろの文のBに、副作用がある場合、
その副作用が実行されるかどうかわからないから、
こういうプログラミングをすると危ないぞ。使うなよ
08948882014/12/26(金) 02:09:02.52ID:hkDjJ4P3
>>890
ideoneのコンパイラのバグでしょうね…

何度か確認したら、>>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
>>893
副作用って何だよ?
A && B、A || B
って書いても問題ないだろ。
0896デフォルトの名無しさん2014/12/26(金) 02:28:00.48ID:hkDjJ4P3
>>895
例えば
 int f1 = func1(), f2 = func2(); // 必ず実行すべき処理 1, 2
 if(f1 || f2)
 {
  //…
 }
ならば必ず func2() が実行されるけど、

 if(func1() || func2())
 {
  //…
 }
だと func2() が実行されなくて問題だ。ということでしょう。
0897デフォルトの名無しさん2014/12/26(金) 02:32:02.65ID:hkDjJ4P3
付け加えると、>>896の例で || ではなく && の時、
後者の判定式だと func1() の結果がゼロ(偽)だったら
func2() が実行されない
0898デフォルトの名無しさん2014/12/26(金) 02:34:02.11ID:hkDjJ4P3
訂正
>>896
× > だと func2() が実行されなくて問題だ。ということでしょう。
○ > だと func1() が真だったとき func2() が実行されないので問題だ。ということでしょう。
08998932014/12/26(金) 02:48:04.42ID:EqAHHrNc
A && B、A || B

副作用とは、何かの状態が変わってしまうこと。
変数を更新してもいけない

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
>>900
書けるだろ。
0903デフォルトの名無しさん2014/12/26(金) 12:44:53.88ID:9UUmCfg5
ここは低俗な質問スレだけど、初心者向けじゃないぞ
0904デフォルトの名無しさん2014/12/26(金) 12:59:16.28ID:oTq4KPQc
>>902
短絡評価を知らないプログラマは>900のコードをどう解釈すると思っているんだ?
0905デフォルトの名無しさん2014/12/26(金) 13:01:46.63ID:qv+SuoRH
889ですが>>896は関数の結果を判定するのはいいけど、関数を呼び出して判定するのは危険って事ですかね
普通に変数の比較でも&& ||を使うのもやめた方がいいんですかね?
0906デフォルトの名無しさん2014/12/26(金) 13:05:14.66ID:y3Oe54D2
場合によって呼ばれないことがあるってだけだ
0907デフォルトの名無しさん2014/12/26(金) 13:06:43.68ID:oTq4KPQc
>>905
「短絡評価」を理解できていれば、どんどん使えばいいよ。
尤も、関数に見えるものが本当に関数かそれとも関数型マクロなのか分からないケースもあるから、
そもそも条件判断の中で関数呼ぶのは避けた方がいいと言うこともあるね。
0908デフォルトの名無しさん2014/12/26(金) 13:10:31.94ID:/tniFmZf
それに「短絡評価」という単語を知っていれば、そういう解釈がされるのかどうかも調べられるしな
0909デフォルトの名無しさん2014/12/26(金) 13:23:10.85ID:5vBQJBUk
なんで短絡評価が危ないってことになってんの
MISRA-Cでも短絡評価自体は警告対象じゃない
短絡評価の右オペランドに副作用ありの式を入れるなって言ってるだけ
0910デフォルトの名無しさん2014/12/26(金) 13:27:58.14ID:qv+SuoRH
ぐぐってみたら論理演算子に標準演算子と短絡演算子ってのがあるのを初めて知りました
一般的なC言語入門サイトだと& |ではなくて&& ||を教えてますよね…
& |の存在自体知らなかったので覚えておきます
0911デフォルトの名無しさん2014/12/26(金) 13:30:34.73ID:oTq4KPQc
いや、それはビット演算子だから使うな。
0912デフォルトの名無しさん2014/12/26(金) 13:37:15.92ID:qv+SuoRH
あれま、完全に意味分かんなくなって来たw
つまり if( A && B && C )があった時、Aが0だったらそれ以降は判定(実行)されないってのを覚えておけば問題ないって事ですか?
で& | は別モンだから今は気にするなって事でしょうか?
0913デフォルトの名無しさん2014/12/26(金) 13:57:07.38ID:nS4v0Az9
>>909
その通りだ
0914デフォルトの名無しさん2014/12/26(金) 13:58:10.39ID:y5Wm5xR7
そうだ
0915デフォルトの名無しさん2014/12/26(金) 14:16:46.54ID:PAH/8l9T
>>910
&amp; や | はビット(2進法での各桁)ごとに論理演算した結果を計算するものだから別物だね

int a = 24482; // = 101111110100010
int b = 255; // = 11111111
int c = a &amp; 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
if(struct_ptr && struct_ptr->next)
なか?
0918デフォルトの名無しさん2014/12/26(金) 17:09:07.74ID:0K0HmtAp
891だけどさ

aが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:oTq4KPQc
かっこわるい……
0921デフォルトの名無しさん2014/12/26(金) 18:31:41.94ID:mKbPINot
>>919 がマクロ関数を()で括ってなくて殴られる姿が目に浮かぶ
0922デフォルトの名無しさん2014/12/26(金) 20:42:37.13ID:qv+SuoRH
遅くなりましたが889関連のレス&補足くれた方々ありがとうございました
0923 ◆QZaw55cn4c 2014/12/26(金) 21:02:11.82ID:v5yuSvEQ
>>921
マクロを括弧で括る?
0924デフォルトの名無しさん2014/12/27(土) 01:22:14.02ID:Pwz5s1xQ
>>921
(fputs("a"))ってこと?
0925デフォルトの名無しさん2014/12/27(土) 11:14:16.24ID:miqkgc9t
>>889
に関連して質問なのですが、複数の条件をパスした場合に目的の処理を行いたい場合、

if(a){
 if(b)}
  if(・・・){
   目的の処理
  }
 }
}

と

if(!a)
 return;
if(!b)
 return;
if(!・・・)
 return;

目的の処理

のどちらの書き方がお勧めでしょうか?私はなんとなく後者派です。
0926デフォルトの名無しさん2014/12/27(土) 11:35:38.42ID:Xe8/BGM1
好きにすればいい
0927デフォルトの名無しさん2014/12/27(土) 11:56:57.64ID:W6COMWk1
>>889
今時は、if文の書き方で重いとか軽いとか気にする必要は無い。
最適化で全然違うコードに変わったりするし。

一番重要なのは、そのソースコードが人間にとって解り易いかどうか。
それを一番気にすべき。

>>925
なので、後者の方が、不要な条件のケースを先に除外していくことで、
if文のネストという判り難さが排除出来て、シンプルに目的の処理が記述出来るので、
俺もこっちで書くことが多い。
念の為。関数の出だしからの記述という場合な。
ifとelseでそれぞれ処理する場合は、前者+elseという書き方をする。
0928デフォルトの名無しさん2014/12/27(土) 13:55:38.06ID:BFg2jdzp
>>925
俺はネストが嫌いなので後者、例えば

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:Cc0RXd7d
コンビニ強盗
0930デフォルトの名無しさん2014/12/27(土) 14:05:26.34ID:w8NvplaU
ネストのためにgotoまで持ち出すのは何だかなぁ
0931デフォルトの名無しさん2014/12/27(土) 15:01:59.23ID:ixHwaiS6
うむ。
if文 自体を無くす知恵を働かせろ
0932デフォルトの名無しさん2014/12/27(土) 15:10:19.33ID:E3T7edZM
最近は
if(a && b && (・・・)){
  目的の処理
}
って書くと読みずらいって言われるの?
0933デフォルトの名無しさん2014/12/27(土) 15:29:54.00ID:ixHwaiS6
ショートカットも同類
分岐は甘え
0934デフォルトの名無しさん2014/12/27(土) 16:54:13.21ID:Pwz5s1xQ
gotoはないわ
C言語でエラー処理でもするなら別だが
0935デフォルトの名無しさん2014/12/27(土) 17:49:35.38ID:PS8qPAgg
>>934
どうみても >>928 はエラー処理な訳だが
0936デフォルトの名無しさん2014/12/27(土) 19:02:31.13ID:NUsNeTE6
俺は使い分けてるなぁ

if (!a) return; // ここで戻るとエラー
目的の処理 // 正しい処理
return; // 正しい終了

if (a) {
目的の処理 // 正しい処理
return; // 正しい終了
}
特別な場合の処理
return; // エラーではなく、正しいが、ここに来るのはまれなケース
0937デフォルトの名無しさん2014/12/27(土) 21:27:56.41ID:u+dBZrZs
>>925
MISRA-C 2004 ルール14.7 で、
関数の出口は、関数の最後に一つのみとする

出口が複数だと、制御フローが中断され、読み手が混乱する。
また修正時、各出口に修正しなければならない場合もある
0938デフォルトの名無しさん2014/12/27(土) 22:21:05.60ID:xmcSSpEW
> 出口が複数だと、制御フローが中断され、読み手が混乱する。
本当に読み手のことを考えるなら、それは読み手が決めることだから勝手に決めるなよーと思うけどな。
0939デフォルトの名無しさん2014/12/27(土) 22:30:28.48ID:mX32OpPY
大企業であるほど天才だけがプログラムを書いてるわけじゃないから低レベルを底上げするためのルールが必要になる
0940デフォルトの名無しさん2014/12/27(土) 22:31:21.97ID:fbt+Aslf
個人的にはC言語の話だったら勝手にしてって感じだな。
C++にまで持ってきたら許さん。
0941デフォルトの名無しさん2014/12/27(土) 22:32:20.60ID:w8NvplaU
俺は関数の入り口付近に複数+出口ってのが一番読みやすいと思う
チェック部分に掛かると処理がちょろっとで終わっちゃうって場合に
最後までネスト追わないと「処理がない」ことが分からないのは却って読みづらいよ
中途半端な位置の return は読みにくいとは思うが、先頭はむしろ欲しい
0942デフォルトの名無しさん2014/12/27(土) 23:44:23.62ID:7SjtB6Lq
MISRA-Cはバカが生命にかかわるプログラムを作る事を想定したルールだから。
0943デフォルトの名無しさん2014/12/27(土) 23:55:24.50ID:xmcSSpEW
>>939
それなら大企業が自分たち用にルール作ればいいんじゃね?って思うけど
大企業の(お偉いさんが)作るルールだと的外れな可能性もあるのかね
まぁ自分たちでルール作って守らせるより天才にルール作ってもらったほうが説得力はあるのかもしれないが

>>942
果たしてバカがルールを守ってくれるのだろうか・・・
0944デフォルトの名無しさん2014/12/28(日) 00:20:50.01ID:YvmGoXLm
ルールも共用することで開発環境がよくなったり(MISRA-Cチェッカとか)説明責任を果たしやすかったり利点がある
個別にルール作ったってどうせノウハウは同じだし
MISRA-Cを基準にルール増減させてることはあるけど(何が増減してるか明確にしてる)

守れてなきゃ受け入れテスト不合格で納品できないから嫌でも守らざるを得ない
0945デフォルトの名無しさん2014/12/28(日) 00:37:09.43ID:/YZxn3dB
IEC 61508,ISO/WD 26262 では、
コーディングルール + 静的チェックが必須

ルールを守らない場合は、ルールからの逸脱手続きが必要。
また個人で勝手に判断して、逸脱してはいけない

これをしないと、すぐに人が死ぬから、MISRA-Cができた
0946デフォルトの名無しさん2014/12/28(日) 07:21:54.00ID:27cHdU7j
誤 これをしないと、すぐに人が死ぬから、MISRA-Cができた
正 これをしないと、バカが人を殺すから、MISRA-Cができた
0947デフォルトの名無しさん2014/12/28(日) 11:00:33.24ID:I/+kANbX
>>941
>中途半端な位置の return は読みにくいとは思うが、先頭はむしろ欲しい
関数の先頭付近で、受け取った引数の有効性をチェックして無効ならすぐにreturnでお引き取り願う
というケースとか得るよね
returnが関数最後に一カ所でgotoの使用がダメなら、処理無効フラグでも設けて途中をスキップさせることになるのかな
0948 ◆QZaw55cn4c 2014/12/28(日) 12:18:59.28ID:uZelGoi1
ま、その goto が setjmp/longjmp に進化したんだが
0949デフォルトの名無しさん2014/12/28(日) 15:32:44.25ID:27cHdU7j
ちげーよ。アホウ。
0950 ◆QZaw55cn4c 2014/12/28(日) 18:31:58.17ID:6Z3FAnif
SjLjでググレ
0951デフォルトの名無しさん2014/12/28(日) 19:45:13.15ID:AQDitcxr
まあ、MISRA を守ったからと言ってバグが "0" になるわけじゃない
あくまでもポカ避けだよ
0952デフォルトの名無しさん2014/12/28(日) 20:39:26.11ID:tSKpZ2So
ちげーよ。setjmp/longjmpの始祖はLisp1.5のERRSETだ。死ね、アホウ。
0953デフォルトの名無しさん2014/12/28(日) 20:42:42.51ID:SJYHrnZm
えっ?setjmp/longjmpの始祖はドラえもんのどこでもドアに決まってんじゃん(キリッ
0954 ◆QZaw55cn4c 2014/12/28(日) 21:18:16.03ID:ea/rzsF3
>>953
あまり強調されていないようだが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:fHqPGp2q
どこでもドアだってどこでもと言っているけど制限はあるんじゃね?
0956デフォルトの名無しさん2014/12/28(日) 21:24:40.05ID:SJYHrnZm
>>954
22世紀のテクノロジーを20世紀に実現しようとしたんだから制約があって当然(キリッ
0957デフォルトの名無しさん2014/12/28(日) 21:28:04.38ID:kIpimFnn
>>955
まあ、無対策であんなもん売り出したらプライバシーもないし、犯罪の温床になるわな
0958デフォルトの名無しさん2014/12/28(日) 22:23:52.21ID:ea/rzsF3
>>955
その場所自身に開いている、というのはどうだろうか?
一方は扉を引く、一方は扉を押す、ということになり対称性が崩れる
スライド式の上に巻き上がるか地面にずぶずぶ入っていく形だとうまくいくか?
0959デフォルトの名無しさん2014/12/28(日) 23:29:25.01ID:a2va3SXh
>>947
if{
 if{}else{}
}else{
}

たぶん、こういう感じで、ネストが深くなるんだろう
0960デフォルトの名無しさん2014/12/29(月) 00:22:36.25ID:Gl2B1r0m
無効ならすぐにreturnでお引き取り願う んだから else はいらないんじゃね。
{
 if(ptr==NULL) return;
 ・・・;
}

これなら
{
 if(ptr!=NULL)
 {
  ・・・;
 }
}

こうなるわけだし。

>>941が言っているのはこういうことだろうね。
{
 if(ptr!=NULL)
 {
  if(a)
  {
   ・・・;
  }
  ・・・;  //←ここの存在の有無が分かりにくい
 }
}
0961デフォルトの名無しさん2014/12/29(月) 01:29:39.14ID:w4v+nC+a
その次の行の閉じブレースの次の行じゃね
0962デフォルトの名無しさん2014/12/29(月) 08:58:29.73ID:GU9lRZUk
>>960
たしかに「構造的」ではあるんだけどねぇ...
ptr が NULL ならすぐに呼び出し元へ戻る、という単純な流れでも、わざわざ if ブロックの外側を回り込まないとわからないんだよね
「if(ptr==NULL) return;」なら、眺めただけで直感的に理解できる

それならむしろ俺は928氏に同調するな

{
 if(ptr==NULL) goto ERR;
 ・・・;
 ERR: ;
 return;
}

この処理がスパゲティとは思えないけど、まぁ主観によると言われれば"それまで"か?
0963デフォルトの名無しさん2014/12/29(月) 09:53:34.43ID:R9uwHG6j
>>960
> 無効ならすぐにreturnでお引き取り願う

それしちゃいかんと言う話
>>937 辺りから読み直しなよ
0964デフォルトの名無しさん2014/12/29(月) 10:53:50.17ID:w4v+nC+a
>>963
MISRA-Cではそうなってるけど、却って分かりにくくね?という話だろ今は
0965デフォルトの名無しさん2014/12/29(月) 11:27:17.28ID:S6a2iGl8
>>964
そうだよ。
09669282014/12/29(月) 12:09:22.53ID:88bYnTsn
なんかgotoでスレが伸びてるw
>>962
後始末処理が煩雑になるならgoto ERR;、ならないなら即return;でやってます。
0967デフォルトの名無しさん2014/12/29(月) 12:31:14.75ID:90FPncP0
MISRA-Cを使用するようなところでは、関数の戻り値、エラーの返しかたも
統一した方法が規定されているので
if (hoge) return;
等という事はあり得ないのだよ。
0968デフォルトの名無しさん2014/12/29(月) 12:40:24.54ID:9Etq4Oht
なんかレス番飛んでる
0969デフォルトの名無しさん2014/12/29(月) 18:15:19.55ID:Gl2B1r0m
>>962
正常処理した場合でも ERR: ; を通るのがちょっと嫌だなと思う。
昔なんかでgoto は使うなってのがあったと思うんだが、
そのためかgotoは避ける習性がついてる。
自分もifの中が長くなるか、ネストが深くなりそうなら 「if(ptr==NULL) return;」 って返しちゃうけど。

>>963
>>925あたりから読み直しなよw

>>968
goto の仕業です
0970デフォルトの名無しさん2014/12/30(火) 11:43:34.75ID:oELHqRa9
C言語で特性要因図を描きたいのですが、直線や傾線の描き方がわかりません。
参考になる書籍やサイトを教えて下さい。
0971デフォルトの名無しさん2014/12/30(火) 15:30:14.23ID:4OrPIxQI
C言語には絵を描く機能はありません

一応、WindowsであればWin32APIを使えばいいし、
他のOSならその環境で提供されて居るライブラリを使えば可能です

でも、絵を描く系のアプリは、描画ライブラリが標準で提供されている言語
を使った方がよろしいかと
0972デフォルトの名無しさん2014/12/30(火) 16:57:21.27ID:oELHqRa9
ありがとうございます。
0973デフォルトの名無しさん2014/12/31(水) 10:03:42.26ID:BzIgpzQu
>>937
switch使ってreturnが複数あるのはいかんのかえ
0974デフォルトの名無しさん2014/12/31(水) 21:22:22.92ID:JDflDXLg
misraじゃダメだろ、breakで一旦絞ってからじゃないと。
0975デフォルトの名無しさん2014/12/31(水) 21:23:15.11ID:MAv4eoG4
あかん
0976デフォルトの名無しさん2014/12/31(水) 21:36:55.32ID:sJPMMaom
>>919
これからは、カッコマンと名乗りなさい
0977デフォルトの名無しさん2015/01/01(木) 18:44:24.90ID:5u2mylLc
cやc++などでも使うpow()関数の中身を見たいのですがどこで見れるのですか?
調べてみても使い方しか見つかりませんでした
中身が気になって年も越せません、どなたかお願いします
0978デフォルトの名無しさん2015/01/01(木) 18:48:22.95ID:AdVpW5lB
ビルド済みでなくソースコードを配布しているコンパイラ。
0979デフォルトの名無しさん2015/01/01(木) 20:40:47.43ID:kAzVMxFU
>>977
年越してんだろ
glibc
0980デフォルトの名無しさん2015/01/01(木) 21:06:51.24ID:3W20v7ol
あと364日
0981デフォルトの名無しさん2015/01/02(金) 07:53:25.54ID:Kr2J2p4W
double pow(double x, double y) {return exp(log(x) * y);}
// 但し、xが負の場合などのケアはしてないw
0982デフォルトの名無しさん2015/01/02(金) 08:54:44.09ID:7UbCEqjn
glibcならこの辺り

https://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:bUqHV81T
ず
0984デフォルトの名無しさん2015/01/02(金) 20:39:22.13ID:olFjF83r
すごく複雑ですね
ゆっくりと読んでみます
ありがとうございました
0985デフォルトの名無しさん2015/01/02(金) 23:04:31.55ID:wsXrG2FF
>>984
基本は>981だよ。それに負数の時の処理などが付け加えられて>982のようになっている。
0986デフォルトの名無しさん2015/01/03(土) 17:10:20.99ID:KCWAqhUR
https://sites.google.com/site/alcon2013prmu/development
上のサイトの開発手順を参考にして画像処理を行えるプログラムを書きたいのですが、
サンプルソースプログラムのどこをどのように変えればいいのか、
そもそも何から始めればいいのかすら分からず困っています
もし何か分かる方いたら教えて下さるとありがたいです
0987デフォルトの名無しさん2015/01/03(土) 17:14:14.23ID:Cj8CgFQv
こんなところで聞くんじゃなくて
ちゃんとわかる人に教えてもらえ
0988デフォルトの名無しさん2015/01/03(土) 17:15:47.86ID:KCWAqhUR
>>987
どこで聞けばいいですかね?
分かる人がいる場所が分からなくて困ってます……
0989デフォルトの名無しさん2015/01/03(土) 17:53:09.91ID:evDYmhLz
>>988
書かれていることが分からないなら
書かれていることを理解する勉強から始めればいいと思うよ。
0990デフォルトの名無しさん2015/01/03(土) 17:56:11.07ID:zYvZyTAZ
>>988
http://ja.stackoverflow.com/
0991デフォルトの名無しさん2015/01/03(土) 18:05:12.55ID:KCWAqhUR
>>989
了解です!

>>990
ここで聞けば良い感じですかね
ありがとうございます!
0992デフォルトの名無しさん2015/01/04(日) 00:38:53.48ID:Wz/5DFfo
MISRA-Cでは、goto,continueなどは禁止だけど、

Linuxでは、goto ERR;で関数の最後に、
エラー処理をまとめる。
Linusもそれを推奨している
0993デフォルトの名無しさん2015/01/04(日) 01:31:27.96ID:EO5g9rYs
http://www.nurs.or.jp/~sug/soft/super/goto.htm
によると
「Linux デバイスドライバ」(Alessandro Rubini 著、O'Reilly ジャパン刊)
で推奨されているみたいだね。

デバドラとかカーネルとか書く人はアセンブラにも通じていて
goto(jump)には抵抗ないのだろう
0994デフォルトの名無しさん2015/01/04(日) 10:51:52.71ID:YFWQwx9h
まあ教条主義者はgotoを絶対悪と決めつけて無条件に排斥するからね
使い方次第で、分かりやすいプログラムにも、分かりにくいプログラムにも、どちらにもなる、ということを理解できないんだろう
K&Rですら、gotoの有効な例をあげて、慎重に使えば問題ない、という姿勢だったとおもう
0995デフォルトの名無しさん2015/01/04(日) 11:10:52.14ID:EjbbMTMU
>>994
> 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:AZoVKcHR
コンストラクタでやろうと考える時点でおかしいんですかね・・・
0999デフォルトの名無しさん2015/01/04(日) 22:47:01.26ID:kU4tFNpU
>>997
こういうのならば出来そう‥
http://codepad.org/mWOdu8b7
1000デフォルトの名無しさん2015/01/04(日) 22:47:16.34ID:jxWL1hkj
Bのコンストラクタでは基底クラスAのメンバは存在している。
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。