[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 10/30 03:13 / Filesize : 322 KB / Number-of Response : 1026
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part129



1 名前:デフォルトの名無しさん(ワッチョイ dfcf-HvS5) mailto:sage [2017/01/09(月) 14:49:27.56 ID:p96WJVyd0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part128
echo.2ch.net/test/read.cgi/tech/1480172629/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
echo.2ch.net/test/read.cgi/tech/1478440682/

■長いソースを貼るときはここへ。■
 codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

985 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 06:51:34.25 ID:kb+hG/9a0.net]
記録的な亀レスだな

986 名前:デフォルトの名無しさん (ワッチョイ 83b4-bOuD) mailto:sage [2017/03/30(木) 07:10:52.31 ID:GtG5BmiK0.net]
>>955が質問者の日本語を理解出来ていない気がしなくもない

987 名前:デフォルトの名無しさん (ワッチョイ 7384-+x88) mailto:sage [2017/03/30(木) 08:19:28.37 ID:/X8qE6aT0.net]
>>945
ありゃ、残ってたか。それは盲点だった。
参考になったよありがとう。

988 名前:デフォルトの名無しさん (アウアウオー Sa1f-mlhd) [2017/03/30(木) 08:40:58.04 ID:9khgRv1/a.net]
https://goo.gl/8by4rX
これは嫌だなー。。本当?

989 名前:デフォルトの名無しさん (ワッチョイ bfcc-hXdu) mailto:sage [2017/03/30(木) 08:50:24.61 ID:FvKuiJ0u0.net]
どうせまたお肌のスキンケアだろ

990 名前:デフォルトの名無しさん (スプッッ Sddf-8ugA) mailto:sage [2017/03/30(木) 11:54:42.41 ID:3i58Fh9vd.net]
namespaseで区切るのは良いんだけど
無名名前空間の使い道がさっぱりわからん

991 名前:デフォルトの名無しさん (ワッチョイ a328-ZZMP) mailto:sage [2017/03/30(木) 12:05:24.60 ID:QknQ1y490.net]
そのソース以外では使わない関数なんかを放り込んでおけばいい
staticと同じ使い道かな

992 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 12:37:53.22 ID:kb+hG/9a0.net]
つーか無名名前空間があれば記憶クラスのstaticはいらんだろ
1つ1つちまちまstaticをつけて回らなくてもまとめてボンだし

993 名前:デフォルトの名無しさん (スップ Sddf-mnw5) mailto:sage [2017/03/30(木) 12:40:17.76 ID:41dNcfyJd.net]
>>967
名前を考えるという面倒くささなしにメリットを享受できる。



994 名前:デフォルトの名無しさん (ドコグロ MM1f-3MUK) mailto:sage [2017/03/30(木) 13:02:35.48 ID:tcaHNIPGM.net]
>>962
記録的と言うのはこういう奴だろ
hanabi.2ch.net/test/read.cgi/i4004/1221375066/491

995 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 13:40:52.52 ID:kb+hG/9a0.net]
8年半かw

996 名前:デフォルトの名無しさん (ラクッペ MM97-8ugA) mailto:sage [2017/03/30(木) 17:30:29.40 ID:K9zcp/soM.net]
xxx.hに定義されたクラスのメンバ関数を、xxx.cppではなくxxx_impl.hというファイルに実装してるソースがあるのですが、これはどういった意図でしょうか?

997 名前:デフォルトの名無しさん (ワッチョイ cf92-KV4R) [2017/03/30(木) 17:36:39.51 ID:NvGEhIva0.net]
Pimplの実装部分を別ファイルにしたかったんじゃね

998 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 17:36:40.33 ID:oKZnpR9xr.net]
作った奴に訊けボケ

999 名前:デフォルトの名無しさん (ササクッテロレ Sp17-EkMZ) mailto:sage [2017/03/30(木) 17:41:14.24 ID:uipyTNiYp.net]
ヘッダで完結させたい
テンプレート関数
ヘッダと実装の分離

このへん

1000 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/03/30(木) 19:08:10.58 ID:Qgxuh/pI0.net]
何が何でもヘッダから実装を追い出したい人がやってるやつ

1001 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 19:50:46.10 ID:dELrX4bqr.net]
↑ヘッダーとファイルを混同している低能
そしてxxx_impl.hをxxx_impl.cppに空目したアホ

1002 名前:デフォルトの名無しさん (スッップ Sddf-ahp/) mailto:sage [2017/03/30(木) 20:13:43.42 ID:qxGCi119d.net]
ヘッダに実装書くとコンパル時間うざくない?

1003 名前:デフォルトの名無しさん (ワッチョイ bf3c-agmj) [2017/03/30(木) 20:33:38.20 ID:sHIKu4vn0.net]
>>961 バカでごめん。
>>9-14 以降、よく高級言語だけでギャーギャー130レスも盛り上がれたな。
qiita.com/nanashi/items/4aff10ab6f9669d006dc
これそっくりのコードで実験した
int hoge(int i) {
int r=0;
if (i >= 0) {
static int ii = static_int(i);
r=ii;
} else {
static int ii = static_int(i);
r=ii;
}
return r;
}
  static_int(i)を呼び出すあたりで
MOV DWORD PTR SS:[ESP],a.00406048 ←ガード(ロック)のためのオブジェクト(もちろんコンパイラが吐く暗黙のだろう)への参照を引数にとっている模様
CALL <JMP.&libstdc++-6.__cxa_guard_acquire> → この中には libwinpthread-1の pthread_once、pthread_mutex_lock、pthread_cond_wait、pthread_mutex_unlockなど(>>15)
TEST EAX, EAX
JE なんちゃら (つまりこの分岐でstaticを初期化するかどうか決めている模様)

リリースはこれ
MOV DWORD PTR SS:[ESP],a.00406048
CALL <JMP.&libstdc++-6.__cxa_guard_release>

上記はhoge()内が i と定数比較による単純な正負2分岐であり、呼び出しもhoge(1)などの定数の場合は、hoge()が二つの関数に展開された場合もあった。

hoge()内の i の分岐が定数比較の5分岐(else if)にしてみたら、ガードオブジェクトが個別に5つ作られているように見えた。

結構おもしろね、この結果。



1004 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 20:55:33.59 ID:8zS706yR0.net]
>>967
なんらかのクラスのメンバ関数を他の翻訳単位から見えなくしたいが
明示的に名前つけたnamespaceにしたくないときは要る
staticでは代わりにならない
(他になんかあるっけ;

1005 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 21:03:14.83 ID:dELrX4bqr.net]
>クラスのメンバ関数を他の翻訳単位から見えなくしたいが明示的に名前つけたnamespaceにしたくないとき

始めて聞く珍妙な説だ
今日はクスリを飲み忘れているとか?

1006 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:21:56.78 ID:8zS706yR0.net]
>>982
a.cppとb.cppに同じ名前のクラスの定義を書いてしまい、さらに同じシグネチャのメンバ関数を書いてしまい、
しかし関数の中身が違うケースを考えると良い
これはリンク時にエラーになるか、杜撰な処理系だとどちらかが適当に呼ばれるという実害があり、
なおかつnamespaceでガードしない限り、ソースコードを弄る誰かが知らずに上のケースを実現してしまう危険性が残る

1007 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:26:32.64 ID:8zS706yR0.net]
スマン
誤: namespaceでガードしない限り
正: 無名namespaceでガードしない限り

名前付きnamespaceだとたまたま同じ名前を使われてしまう危険性が残る、

1008 名前:デフォルトの名無しさん (ワッチョイ cf1f-jsM4) mailto:sage [2017/03/30(木) 21:26:49.87 ID:gILJOuVy0.net]
杜撰な処理系って具体的には何?

1009 名前:デフォルトの名無しさん (ワッチョイ 038f-MCV6) [2017/03/30(木) 21:33:19.96 ID:kb+hG/9a0.net]
>>981
メンバは強制的に外部結合だからなあ
982は

1010 名前:Vャブじゃなくエトルフィンでも入れてるのかな []
[ここ壊れてます]

1011 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:34:44.32 ID:8zS706yR0.net]
>>985
Visual Studo 2010についてくるVC++とかいうマイナーな処理系
2008もそうだったような…

1012 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:39:33.97 ID:8zS706yR0.net]
次のコードで実験でくる。今日実験したら答えはcall_foo_a()もcall_foo_b()も30やったわ;
■ "a.cpp"
static foo {
 int func(int x, int y) { return x + y; }
};
void call_foo_a() {
 foo x;
 printf("%s: func(10, 20)=%d\n", __FUNCTION__, x.func(10, 20));
}

■ "b.cpp"
(a.cppと同じだが、foo::func()の中身を return x - y;に変えたやつ)

■ "main.cpp"
extern void call_foo_a();
extern void call_foo_b();
int main() {
call_foo_a(); call_foo_b();
}

1013 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:43:20.63 ID:8zS706yR0.net]
>>987
それはそうかもしれないが、無名namespaceのマングリング規則がトリッキーなのを
>>987は知らないんじゃないの;
いや詳しくは漏れも知らんが、

実際>>988のコードは"a.cpp"と"b.cpp"のfooをどっちも無名namespaceで囲えば正しく動く、
(call_foo_a()は30、call_foo_b()は-10となる、



1014 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 21:45:46.29 ID:dELrX4bqr.net]
>>983
>しかし関数の中身が違うケースを考えると良い

なるほど
それはクラスの定義自体が漏れていることが問題なのだが
なぜかメンバ関数の問題と勘違いしてしまったのだな

1015 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 21:49:03.80 ID:8zS706yR0.net]
>>990
何言ってるのかわからんが推測でレスするが、
メンバ関数を含まないクラスや構造体はリンクが必要なシンボルを生成しないから
同名のブツが複数の翻訳単位にあっても全く問題は無い(よってC言語はstaticだけで逝けた
つまりメンバ関数がこの話の本質だとわかっていない>>990のレスは大概だ、

1016 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 22:05:28.61 ID:dELrX4bqr.net]
>全く問題は無い

なるほど
ODR違反の未定義動作が問題無いと考えてしまうようでは致し方ない。
ちなみにC++にはテンプレートというものが有って
重複定義された型をパラメーターに持つテンプレートのインスタンスが問題を起こすと言うことには気づかなかったらしい

1017 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 22:15:12.42 ID:8zS706yR0.net]
>>992
ていうか話は逆で、>>988のようなケースがあるからODR制約という概念が生まれ、
無名namespaceは>>988のようなケースにおける解決策
(異なるマングリング名で異なる定義を識別するのだからODR制約には抵触しなくなる
ソースは脳内

>重複定義された型をパラメーターに持つテンプレートのインスタンスが問題を起こすと言うことには気づかなかったらしい
そりゃーODR制約違反のソースだとそうなるが、
無名namespaceで修正した>>988のfooでは起き得ない話、

1018 名前:デフォルトの名無しさん (オッペケ Sr17-bOuD) mailto:sage [2017/03/30(木) 22:24:43.35 ID:dELrX4bqr.net]
>無名namespaceで修正した>>988のfooでは起き得ない話、

うーむ、二つ前の本人のレスは
無名namespaceで修正してなくても関数が無ければ全く問題ない
だったと思うのだが、もう忘れたのだろうか

1019 名前:デフォルトの名無しさん (ワッチョイ f359-HQfx) mailto:sage [2017/03/30(木) 22:47:57.29 ID:8zS706yR0.net]
おk
無名namespaceで修正して「いない」>>998はODR違反だった気がするので
今謹んで訂正した、

1020 名前:デフォルトの名無しさん (ワッチョイ d372-8ugA) mailto:sage [2017/03/30(木) 23:55:20.49 ID:Plkrcx8f0.net]
>>976
テンプレート関数だからでした。
想定されてたコンパイラのテンプレートの解釈がinclusion-modelってやつで、そのためでした。
ありがとうございました。

1021 名前:デフォルトの名無しさん (ワッチョイ efc8-CrJt) mailto:sage [2017/03/31(金) 01:06:57.90 ID:ryHYQIXS0.net]
こういう糞議論してる間にほかの言語で着々とプロダクトが作られていくわけである。

1022 名前:デフォルトの名無しさん (ワッチョイ f37a-QmV0) mailto:sage [2017/03/31(金) 01:09:12.34 ID:UkLjKqcm0.net]
記述の自由度が高いせいで全貌を知る者がほとんど居ない

1023 名前:デフォルトの名無しさん (ワッチョイ cf36-FVbu) mailto:sage [2017/03/31(金) 01:14:14.24 ID:RI1LGJ050.net]
いや利用者の多いまともなプロダクトはc++で記述されているのが多いだろ。
LL言語のVMとかブラウザとかもそうだし



1024 名前:デフォルトの名無しさん (ワッチョイ cf92-KV4R) [2017/03/31(金) 01:44:24.21 ID:zbf3isLY0.net]
パフォーマンスが重要な製品作る必要あるなら現状C++しか選択肢ないからね

1025 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<322KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef