次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
https://mevius.5ch.net/test/read.cgi/tech/1547326582/
C++相談室 part141
https://mevius.5ch.net/test/read.cgi/tech/1550772463/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part142
■ このスレッドは過去ログ倉庫に格納されています
2019/04/01(月) 22:17:05.84ID:wmfpIKt/
209デフォルトの名無しさん
2019/04/13(土) 15:46:26.77ID:MSTjQ8pp jniはjavaのプラットフォームにc++での開発成果物を持ち込むためのもので、そうでないならわざわざそんなもの使う意味は薄い
マルチプラットフォームなアプリを作りたいならQtなりwxなりを使った方が速いし楽
マルチプラットフォームなアプリを作りたいならQtなりwxなりを使った方が速いし楽
210デフォルトの名無しさん
2019/04/13(土) 15:47:10.35ID:Uq+8Y9kK >>208
でもいつ訴えられるかわからないから怖いですう。
でもいつ訴えられるかわからないから怖いですう。
211デフォルトの名無しさん
2019/04/13(土) 15:58:39.59ID:U0TmzhoK そもそも、Androidアプリにとってのシステムコール(API)とは、Javaの関数だと
思うので、この構造自体は Android における「最も高速なアプリ」になっている
と思う。
思うので、この構造自体は Android における「最も高速なアプリ」になっている
と思う。
212デフォルトの名無しさん
2019/04/13(土) 15:59:50.41ID:U0TmzhoK213デフォルトの名無しさん
2019/04/13(土) 16:11:49.69ID:U0TmzhoK >>209
それらはサイズが大きい。
それらはサイズが大きい。
214デフォルトの名無しさん
2019/04/13(土) 16:14:38.06ID:MSTjQ8pp 糞デカイ上に更新面倒なjavaのruntime入れさせるほうが害悪だろ
flashより糞度が高い
flashより糞度が高い
215デフォルトの名無しさん
2019/04/13(土) 16:22:55.04ID:U0TmzhoK AndroidはJREはプリインストール済みなんじゃないの?
オイラは実機持ってないので全く分からないんだな。
オイラは実機持ってないので全く分からないんだな。
216デフォルトの名無しさん
2019/04/13(土) 16:32:58.01ID:MSTjQ8pp androidで実質c++でのアプリ開発する仕組みなら既にある
jniそのまま使うよりは大分マシ
jniそのまま使うよりは大分マシ
217デフォルトの名無しさん
2019/04/13(土) 16:36:12.19ID:jD4Gkzzm >>216
どうやるの?
どうやるの?
218デフォルトの名無しさん
2019/04/13(土) 16:39:07.74ID:2fZ9oexv219デフォルトの名無しさん
2019/04/13(土) 16:42:39.35ID:U0TmzhoK Qt は、内部的に Backend で Java を使ってるのかな。
220デフォルトの名無しさん
2019/04/13(土) 17:18:44.33ID:ubPOLJQD なんかJavaを間違って理解してるっぽい。
221デフォルトの名無しさん
2019/04/13(土) 17:21:04.26ID:YpOFfnix >>219
もういい加減スレ違いだから消えてくれ
もういい加減スレ違いだから消えてくれ
222デフォルトの名無しさん
2019/04/13(土) 19:21:24.16ID:mZFqlfzi vector に格納されてる値から添え字の番号を取得するための最も手軽な方法はなんでしょうか
イテレータから添え字番号を取得することはできますが、あくまで値からやりたいです
イテレータから添え字番号を取得することはできますが、あくまで値からやりたいです
223デフォルトの名無しさん
2019/04/13(土) 19:26:24.27ID:ujTcdvrD 格納してる値にインデックスの手がかりがないんだったら
findで探して結果のイテレータから取得するしかないな
findで探して結果のイテレータから取得するしかないな
224デフォルトの名無しさん
2019/04/13(土) 19:26:44.48ID:2fZ9oexv >>222
findしてdistance
findしてdistance
225デフォルトの名無しさん
2019/04/13(土) 19:31:01.29ID:mZFqlfzi226デフォルトの名無しさん
2019/04/13(土) 19:42:14.61ID:2fZ9oexv >>225
そんな単純な検索なら3行くらいなんだから作ればいいのに
そんな単純な検索なら3行くらいなんだから作ればいいのに
227デフォルトの名無しさん
2019/04/13(土) 20:12:30.52ID:mZFqlfzi 奇遇なことに辞書も三行くらいです
228デフォルトの名無しさん
2019/04/14(日) 01:05:39.34ID:dZAE6IVm そら奇遇ですな。
>>200
とても興味を覚えました
私は、そろそろ言語間でライブラリも共用されるべきだと考えています
一つの記述体で各言語共通というのはさすがに難しいにせよ、
Java のライブラリと同等なもの(名前と機能が共通のもの)が C++ にもあってもいいんじゃないか?と数年前から妄想しています…
とても興味を覚えました
私は、そろそろ言語間でライブラリも共用されるべきだと考えています
一つの記述体で各言語共通というのはさすがに難しいにせよ、
Java のライブラリと同等なもの(名前と機能が共通のもの)が C++ にもあってもいいんじゃないか?と数年前から妄想しています…
230デフォルトの名無しさん
2019/04/14(日) 07:17:55.90ID:/tPpXRHC もうJavaのことは忘れて生きろ
231デフォルトの名無しさん
2019/04/14(日) 07:42:20.38ID:YohaqxbG JavaとC++に共通インターフェースを作るのは反対。
車輪の再発明にしかならない。自由を奪うだけの愚策。
車輪の再発明にしかならない。自由を奪うだけの愚策。
>>231
強要するのではなく、オプション(選択肢)として提供するのはどうでしょうか?
強要するのではなく、オプション(選択肢)として提供するのはどうでしょうか?
233デフォルトの名無しさん
2019/04/14(日) 08:04:00.89ID:YohaqxbG >>232
共通ライブラリを使う側にとってはオプションであることは当然。
共通ライブラリを作る側の話をすべき。共通ライブラリの規格決定権者が増えすぎること自体が好ましくない。
これはEU諸国がトルコがEU参加することを拒否する感覚に近い。
共通ライブラリを使う側にとってはオプションであることは当然。
共通ライブラリを作る側の話をすべき。共通ライブラリの規格決定権者が増えすぎること自体が好ましくない。
これはEU諸国がトルコがEU参加することを拒否する感覚に近い。
>>233
私は EU には否定的(グローバリストの巣窟であり、普通選挙/自由選挙による合意形成をスキップするポジションを作って人を操作するからくり、トルコもたぶん目が覚めているのでは?)ですが、それはさておき、
すでにある java/classpath スケルトンを真似してしまおう、という低姿勢・低いプライドを貫くのであれば、規格策定者は基本要らなくなりませんか?だって真似するだけだし…
私は EU には否定的(グローバリストの巣窟であり、普通選挙/自由選挙による合意形成をスキップするポジションを作って人を操作するからくり、トルコもたぶん目が覚めているのでは?)ですが、それはさておき、
すでにある java/classpath スケルトンを真似してしまおう、という低姿勢・低いプライドを貫くのであれば、規格策定者は基本要らなくなりませんか?だって真似するだけだし…
235デフォルトの名無しさん
2019/04/14(日) 08:59:21.33ID:k2b6YaL9 まだC++98しか知らないと、取り残されますか。
236デフォルトの名無しさん
2019/04/14(日) 09:09:36.38ID:YohaqxbG まずは、Javaと瓜二つな C#、.NET、C++/CLIが今どうなっているか考えてみては。
237L
2019/04/14(日) 09:28:45.12ID:Y1IcINvd >>229
ちょっと話しはズレるけど、あなたの賛同で嬉しくなったので、入手した耳寄りな
情報を書いておこうと思う。既に知ってる人も当然いると思うけど、
WebAssemblyで作ったようなWebAppliは、ブラウザのURL欄やタイトルバーなどが
表示されてしまうのが難点として残っていた。ところがなぜかElectronでは消せて
いたのでChromeではなくChromiumを使っているからかと思っていた。
ところが、manifest.json なるものを書いて、HTMLにそのファイルを使うように
書いておいて、display プロパティーを standalone やfullscreen にすると、
URL欄が消せるらしい。
ちょっと話しはズレるけど、あなたの賛同で嬉しくなったので、入手した耳寄りな
情報を書いておこうと思う。既に知ってる人も当然いると思うけど、
WebAssemblyで作ったようなWebAppliは、ブラウザのURL欄やタイトルバーなどが
表示されてしまうのが難点として残っていた。ところがなぜかElectronでは消せて
いたのでChromeではなくChromiumを使っているからかと思っていた。
ところが、manifest.json なるものを書いて、HTMLにそのファイルを使うように
書いておいて、display プロパティーを standalone やfullscreen にすると、
URL欄が消せるらしい。
239デフォルトの名無しさん
2019/04/14(日) 10:28:52.88ID:k2b6YaL9 質問を変えてみよう。
C++11やC++14のコードは、職場で取り入れられてますか。
C++11やC++14のコードは、職場で取り入れられてますか。
240デフォルトの名無しさん
2019/04/14(日) 11:49:20.77ID:q+cUY/8y >>239
ガンガン取りいれてるよ。
なにげにでかいのが日本語識別子の保証。適切に使うと可読性が笑っちゃうくらい上がるw
ヘッダーのプロトタイプ宣言とかが特におすすめかな。
あとchar16_t/char32_tも結構ありがたい。WindowsとUNIX系のOS間で同じ文字コードとして共通で使える型が以前はなかったからね。
20でようやく入るみたいだが、なぜchar8_tを入れかったのか(´・ω・`)
std::initializer_listもかなり便利。型安全で個数も分かる上に、引数の一番後ろじゃなくてもいいので、cの...と違って気軽に使える。
あとよく使うのは範囲for文と、イテレータの簡略化かな。いくつかの演算子をオーバーロードすれば良いだけだから、
結構気軽に範囲for文対応のイテレータを書ける。
ラムダ式も関数の引数に直接関数を埋め込んだりできて便利。
ガンガン取りいれてるよ。
なにげにでかいのが日本語識別子の保証。適切に使うと可読性が笑っちゃうくらい上がるw
ヘッダーのプロトタイプ宣言とかが特におすすめかな。
あとchar16_t/char32_tも結構ありがたい。WindowsとUNIX系のOS間で同じ文字コードとして共通で使える型が以前はなかったからね。
20でようやく入るみたいだが、なぜchar8_tを入れかったのか(´・ω・`)
std::initializer_listもかなり便利。型安全で個数も分かる上に、引数の一番後ろじゃなくてもいいので、cの...と違って気軽に使える。
あとよく使うのは範囲for文と、イテレータの簡略化かな。いくつかの演算子をオーバーロードすれば良いだけだから、
結構気軽に範囲for文対応のイテレータを書ける。
ラムダ式も関数の引数に直接関数を埋め込んだりできて便利。
>>240
>char16_t/char32_tも結構ありがたい
確かに
char16_t と u"" がなければ win32api W 系とか途方に暮れていたとおもいます… https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
>char16_t/char32_tも結構ありがたい
確かに
char16_t と u"" がなければ win32api W 系とか途方に暮れていたとおもいます… https://mevius.5ch.net/test/read.cgi/tech/1434079972/53
242はちみつ餃子 ◆8X2XSCHEME
2019/04/14(日) 12:43:45.83ID:+qOUcSLR ガンガン最新を追うべきとまでは思わないけど、
C++11 は最低限度じゃないかなぁ。
C++11 は最低限度じゃないかなぁ。
243デフォルトの名無しさん
2019/04/14(日) 14:27:39.08ID:6Gooiv09 17便利すぎ
variant,visit,lambda,if constexpr
のコンボで捗る
variant,visit,lambda,if constexpr
のコンボで捗る
244デフォルトの名無しさん
2019/04/14(日) 14:34:56.13ID:GSX89KOm つーか今はもうC++11の機能は使わずにC++で書け!といわれても
やりきる自信がなくなった・・
やりきる自信がなくなった・・
245デフォルトの名無しさん
2019/04/14(日) 14:39:38.95ID:krJLkXqZ 古い環境だと最近のサンプルがビルドできなくて困る
246デフォルトの名無しさん
2019/04/14(日) 16:02:33.26ID:YQLb8Tsj c++11とか名乗るから誤解されるんだよ。
c++++とかのがイメージ的に正しい。
c++++とかのがイメージ的に正しい。
247デフォルトの名無しさん
2019/04/14(日) 16:06:36.29ID:dZAE6IVm C#ってことか。
248デフォルトの名無しさん
2019/04/14(日) 16:12:40.18ID:YQJCzKEv repeat文って入らないの?
250デフォルトの名無しさん
2019/04/14(日) 16:20:53.89ID:YQJCzKEv >>249
repeat(int i; n) で for(int i; i<n; i++) と同じ意味な機能
repeat(int i; n) で for(int i; i<n; i++) と同じ意味な機能
251デフォルトの名無しさん
2019/04/14(日) 16:22:55.01ID:6Gooiv09252デフォルトの名無しさん
2019/04/14(日) 16:24:45.44ID:6Gooiv09 初期値はi=0とかすればいいのか
でもそうなるとi=1にした場合何回ループするのか混乱しそう
でもそうなるとi=1にした場合何回ループするのか混乱しそう
253デフォルトの名無しさん
2019/04/14(日) 16:32:41.09ID:IovzG98E >>253
Java の人も C# の人も c++ の人も python も ruby も一緒の名前で一緒の機能が使えたら,コストの中でも一番高くつく勉強コストを減らせるのではないでしょうか
Java の人も C# の人も c++ の人も python も ruby も一緒の名前で一緒の機能が使えたら,コストの中でも一番高くつく勉強コストを減らせるのではないでしょうか
255デフォルトの名無しさん
2019/04/14(日) 16:44:39.61ID:YQJCzKEv >>251
Linuxのカーネルにrepeatマクロ大量にあるもん
Linuxのカーネルにrepeatマクロ大量にあるもん
257デフォルトの名無しさん
2019/04/14(日) 16:53:20.02ID:6Gooiv09 こんなので十分だろ
https://ideone.com/I6e8NZ
https://ideone.com/I6e8NZ
258デフォルトの名無しさん
2019/04/14(日) 16:59:12.33ID:6Gooiv09 >>254
wxでもQtでもメジャー言語のbinding位あるだろ
wxでもQtでもメジャー言語のbinding位あるだろ
259デフォルトの名無しさん
2019/04/14(日) 17:09:53.36ID:IovzG98E260デフォルトの名無しさん
2019/04/14(日) 17:10:32.89ID:h7KNzBMl webプログラマーなんですが、右辺値、fowardっていつ使うのか気になります
というかなんでそこまで、厳密に分ける必要があるのか
業務で使ってる方、使用例を教えてください
というかなんでそこまで、厳密に分ける必要があるのか
業務で使ってる方、使用例を教えてください
261デフォルトの名無しさん
2019/04/14(日) 17:20:10.51ID:sCsh6GnA 右辺値というかムーブ関数の定義といらなくなるオブジェクトにstd::move付けとくのは絶対損にはならないからとりあえずやっとく
forwardはテンプレートライブラリ作るなら必須だけど自分では使ったことないなあ
forwardはテンプレートライブラリ作るなら必須だけど自分では使ったことないなあ
262さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/04/14(日) 17:25:45.47ID:86P3zzV7 コピーにコストがかかる場合は、std::swapやstd::moveのが早い場合があるからね。ムーヴはコピーじゃなくて引っ越しだから。
263デフォルトの名無しさん
2019/04/14(日) 17:27:07.70ID:YQLb8Tsj まあ理論上はね。。そういう実装になってるかどうかはコード見ないとわからんけどね。
264デフォルトの名無しさん
2019/04/14(日) 17:29:38.84ID:6Gooiv09 基本的には高速化が目的でmove使わなくてもなんとかなるが、
所有権絡むとmoveは必須になる
forwardはtemplateで引数渡すときにmoveやら参照やらの完全転送する場合必須
所有権絡むとmoveは必須になる
forwardはtemplateで引数渡すときにmoveやら参照やらの完全転送する場合必須
265さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/04/14(日) 18:16:04.21ID:86P3zzV7 ちょっと実際にやってみようか。コピーコンストラクタで十秒待つコードを書く。ムーヴコンストラクタとムーヴ代入でなにもしない。
この状態でstd::moveを使わないで代入すると十秒かかる。
この状態でstd::moveを使わないで代入すると十秒かかる。
266さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/04/14(日) 18:17:20.92ID:86P3zzV7 訂正。「コピー代入で十秒待つコードを追加」
267デフォルトの名無しさん
2019/04/14(日) 18:47:05.84ID:xCvd3oj/ >>264
>所有権絡むとmoveは必須
必須とまでは言えない
T::T(const T& obj)
という通常のコピコンを定義して、コピコンの中でconst剥がししたら
とりあえず所有権の移動もmove無しで逝ける
>所有権絡むとmoveは必須
必須とまでは言えない
T::T(const T& obj)
という通常のコピコンを定義して、コピコンの中でconst剥がししたら
とりあえず所有権の移動もmove無しで逝ける
268はちみつ餃子 ◆8X2XSCHEME
2019/04/14(日) 18:50:44.06ID:+qOUcSLR >>260
高速化のために出来るのは、アルゴリズムのレベルでの工夫を別にすれば、出来ることはショートカットだ。
高速化とは近道なんだよ。
場合分けが出来るなら、どうしてもやらなければならないこと、やらなくてもいいことを「区別」できる。
区別できるなら、やらなくてもいいことは省略できる。
言語での区別が無くても、たとえば C でも区別を陽に書けばムーブみたいなことだって、そりゃあ出来るけども、
そんなクソ面倒くさいことはしたくないので言語でのサポートがあるとありがたい。
まあ速度的にそこまで必要ないってのなら、区別を積極的に利用しなくてもかまわないよ。
でも、必要なときに出来る方法が用意されているとうれしいし、
C++ を使うときというのはそれなりに実行速度が必要なときだろうし。
高速化のために出来るのは、アルゴリズムのレベルでの工夫を別にすれば、出来ることはショートカットだ。
高速化とは近道なんだよ。
場合分けが出来るなら、どうしてもやらなければならないこと、やらなくてもいいことを「区別」できる。
区別できるなら、やらなくてもいいことは省略できる。
言語での区別が無くても、たとえば C でも区別を陽に書けばムーブみたいなことだって、そりゃあ出来るけども、
そんなクソ面倒くさいことはしたくないので言語でのサポートがあるとありがたい。
まあ速度的にそこまで必要ないってのなら、区別を積極的に利用しなくてもかまわないよ。
でも、必要なときに出来る方法が用意されているとうれしいし、
C++ を使うときというのはそれなりに実行速度が必要なときだろうし。
269デフォルトの名無しさん
2019/04/14(日) 18:52:09.33ID:xCvd3oj/ とわいえmoveコンストラクタの方が意図が明確なコードが書けるから良い。
moveコンストラクタがふさわしい例っていやーつぎごケース。
class BarWithBigData {
Foo* m_pBigData;
BarWithBigData() : m_pBigData(new Foo[1000000000000] { }
~BarWithBigData() { delete[] m_pBigData; }
BarWithBigData(BarWithBigData&& rhs) { m_pBigData = rhs.m_pBigData; rhs.m_pBigData = NULL; }
Foo* refBigData() { return m_pBigData; }
};
ちなstd::arrayは使った無いから知らん
moveコンストラクタがふさわしい例っていやーつぎごケース。
class BarWithBigData {
Foo* m_pBigData;
BarWithBigData() : m_pBigData(new Foo[1000000000000] { }
~BarWithBigData() { delete[] m_pBigData; }
BarWithBigData(BarWithBigData&& rhs) { m_pBigData = rhs.m_pBigData; rhs.m_pBigData = NULL; }
Foo* refBigData() { return m_pBigData; }
};
ちなstd::arrayは使った無いから知らん
270デフォルトの名無しさん
2019/04/14(日) 18:53:54.12ID:xCvd3oj/ 訂正orz、
誤:
Foo* m_pBigData;
BarWithBigData() : m_pBigData(new Foo[1000000000000] { }
正:
Foo* m_pBigData;
public:
BarWithBigData() : m_pBigData(new Foo[1000000000000]) { }
誤:
Foo* m_pBigData;
BarWithBigData() : m_pBigData(new Foo[1000000000000] { }
正:
Foo* m_pBigData;
public:
BarWithBigData() : m_pBigData(new Foo[1000000000000]) { }
271デフォルトの名無しさん
2019/04/14(日) 18:54:00.95ID:mEGAHR/Y コピコンの中でconst剥がしってちょっと何言ってるか分からない
272さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/04/14(日) 18:55:03.68ID:86P3zzV7 十秒待つ待つコードはWindowsなら#include <windows.h>してSleep(10*1000);であり、
Linuxなら#include <unistd.h>してsleep(10);だ。
C++11ならstd::chronoに待つ関数があったはず。
Linuxなら#include <unistd.h>してsleep(10);だ。
C++11ならstd::chronoに待つ関数があったはず。
273さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/04/14(日) 18:57:07.74ID:86P3zzV7 const_castだろ。jk
274デフォルトの名無しさん
2019/04/14(日) 18:57:37.12ID:xbTIwD1q >>271 「move無しで(未定義動作に)逝ける」ってことでしょ。
275デフォルトの名無しさん
2019/04/14(日) 18:57:39.39ID:xCvd3oj/276デフォルトの名無しさん
2019/04/14(日) 19:10:15.32ID:sCsh6GnA まあ実際にはそんなムーブをゴリゴリ書くことはなくて
m_pBigDataをunique_ptr<array<Foo, 1000000000000>>にしてムーブctor、ムーブop=、デストラクタを=defaultにするけどな
m_pBigDataをunique_ptr<array<Foo, 1000000000000>>にしてムーブctor、ムーブop=、デストラクタを=defaultにするけどな
277デフォルトの名無しさん
2019/04/14(日) 19:21:51.01ID:kBfBajGR auto_ptrよりヤバイ奴
const_castでconst外した後実際に書き換えてしまうとかw
const_castでconst外した後実際に書き換えてしまうとかw
278デフォルトの名無しさん
2019/04/14(日) 19:38:34.53ID:xCvd3oj/ >>277
ちなconst T&で渡されたブツを関数内でconst_castして書き換えることはそれ自体は合法
ROM上のオブジェクトを渡して死ぬことは有り得るがしたら呼び出し側の違反
また最適化にしくるとしたらそれはコンパイラーのバグ
ちなconst T&で渡されたブツを関数内でconst_castして書き換えることはそれ自体は合法
ROM上のオブジェクトを渡して死ぬことは有り得るがしたら呼び出し側の違反
また最適化にしくるとしたらそれはコンパイラーのバグ
279デフォルトの名無しさん
2019/04/14(日) 19:46:40.04ID:xbTIwD1q >>278
ROM上になくても const T 型で構築されたオブジェクトを書き換えたら未定義動作になるから、
値が変わらない前提の最適化は許されてるよ。
const 無しで構築されたオブジェクトを指す const& の話と混同してそうだね。
ROM上になくても const T 型で構築されたオブジェクトを書き換えたら未定義動作になるから、
値が変わらない前提の最適化は許されてるよ。
const 無しで構築されたオブジェクトを指す const& の話と混同してそうだね。
280デフォルトの名無しさん
2019/04/14(日) 19:53:21.04ID:uvZ0DMTi 質問: c🐴++のrust相対の優位性はなんですか?
281はちみつ餃子 ◆8X2XSCHEME
2019/04/14(日) 19:57:27.42ID:+qOUcSLR282デフォルトの名無しさん
2019/04/14(日) 19:57:44.28ID:6Gooiv09 >>278
未定義じゃないか
c++03 5.2.11の7にはこんなことが書いてある
[Note: Depending on the type of the object, a write operation through the pointer, lvalue or pointer to data
member resulting from a const_cast that casts away a const-qualifier68) may produce undefined behav-
ior (7.1.5.1). ]
未定義じゃないか
c++03 5.2.11の7にはこんなことが書いてある
[Note: Depending on the type of the object, a write operation through the pointer, lvalue or pointer to data
member resulting from a const_cast that casts away a const-qualifier68) may produce undefined behav-
ior (7.1.5.1). ]
283デフォルトの名無しさん
2019/04/14(日) 20:14:45.20ID:xCvd3oj/ >>282
Depending on the type of the objectにおいてmay produce undefined behaviorである
すわなちオブジェクトの型によっては未定義動作に成りえる、
と言っているだけなのでconst T&渡しされたパラメータの書き換えがNGの祥子にはなんね
>>279
>const T 型で構築されたオブジェクトを書き換えたら未定義動作になる
それはそう。しかしconst T&渡しされた関数内でコンパイラはそれを判断できないから
そういった関数内で、参照型かポインタ型引数で関数に渡されたlvalueのconst_castした結果はあくまでlvalue扱い
のはず…
Depending on the type of the objectにおいてmay produce undefined behaviorである
すわなちオブジェクトの型によっては未定義動作に成りえる、
と言っているだけなのでconst T&渡しされたパラメータの書き換えがNGの祥子にはなんね
>>279
>const T 型で構築されたオブジェクトを書き換えたら未定義動作になる
それはそう。しかしconst T&渡しされた関数内でコンパイラはそれを判断できないから
そういった関数内で、参照型かポインタ型引数で関数に渡されたlvalueのconst_castした結果はあくまでlvalue扱い
のはず…
284デフォルトの名無しさん
2019/04/14(日) 20:25:38.94ID:xbTIwD1q >>283
関数内では const& であることを根拠に最適化に使えないのは合ってる。
でもだからといって const& で受け取ったものを書き換えてもよいとは言えない。
void f1(int const&);
int f2()
{
int const x = 1;
f1(x);
return x;
}
x は int const なので、 f2() の return x は f1() が const_cast して x を
書き換える可能性を無視して return 1 に最適化できる、という話。
BarWithBigData const x; が >>275 のコピーコンストラクタに渡された後も
const_cast<BarWithBigData&>(rhs).m_pBigData = NULL; を無視して書き換え前の
m_pBigData が使われる可能性がある。
関数内では const& であることを根拠に最適化に使えないのは合ってる。
でもだからといって const& で受け取ったものを書き換えてもよいとは言えない。
void f1(int const&);
int f2()
{
int const x = 1;
f1(x);
return x;
}
x は int const なので、 f2() の return x は f1() が const_cast して x を
書き換える可能性を無視して return 1 に最適化できる、という話。
BarWithBigData const x; が >>275 のコピーコンストラクタに渡された後も
const_cast<BarWithBigData&>(rhs).m_pBigData = NULL; を無視して書き換え前の
m_pBigData が使われる可能性がある。
285デフォルトの名無しさん
2019/04/14(日) 20:33:37.36ID:mEGAHR/Y 規格が云々言わなくても、9割のプログラマの意図に反してるで終わる話
頼むからそんなコードは頭の中にしまっといてほしい
頼むからそんなコードは頭の中にしまっといてほしい
286デフォルトの名無しさん
2019/04/14(日) 20:37:26.81ID:6Gooiv09 つまりはそれ自体は問題ないが、constとして生成したオブジェクトを渡した瞬間にダメになると言うことか
で、渡すこと自体は制限できないから
プログラム中に罠を仕掛ける事が出来るわけだ。
で、渡すこと自体は制限できないから
プログラム中に罠を仕掛ける事が出来るわけだ。
287デフォルトの名無しさん
2019/04/14(日) 20:39:28.07ID:6Gooiv09 てか、mutable付けとけば問題なくなるな。
288デフォルトの名無しさん
2019/04/14(日) 20:40:25.78ID:6Gooiv09 const_castも要らないし良いことずくめじゃないかw
289デフォルトの名無しさん
2019/04/14(日) 20:45:26.81ID:xCvd3oj/ >>285
わかりたそうする。>>275のケースは素直にムーブコンストラクタを使えば良い。または↓でもだいたいおk
BarWithBigData::BarWithBigData(BarWithBigData& rhs) { m_pBigData = rhs.m_pBigData; rhs.m_pBigData = NULL; }
だいたいというのはムーブコンストラクタ有りの規格のC++コンパイラで↑の非constなコピコンだけ書く警告が出ることがあるからイヤン、
>>286
>つまりはそれ自体は問題ないが
いや問題がある可能性が潰せていない。
void f1(int const&);
int f2()
{
int x = 1;
f1(x);
return x;
}
(xがconst無し)の場合であってもf1(x)がxを書き換えない前提の最適化がf2()にかかったりすると、
f1(x)内で変更したxの値がreturnされるxの値に反映されない可能性がある(f1(x)の呼び出し前後でxがレジスタに乗ったままであるとか、
わかりたそうする。>>275のケースは素直にムーブコンストラクタを使えば良い。または↓でもだいたいおk
BarWithBigData::BarWithBigData(BarWithBigData& rhs) { m_pBigData = rhs.m_pBigData; rhs.m_pBigData = NULL; }
だいたいというのはムーブコンストラクタ有りの規格のC++コンパイラで↑の非constなコピコンだけ書く警告が出ることがあるからイヤン、
>>286
>つまりはそれ自体は問題ないが
いや問題がある可能性が潰せていない。
void f1(int const&);
int f2()
{
int x = 1;
f1(x);
return x;
}
(xがconst無し)の場合であってもf1(x)がxを書き換えない前提の最適化がf2()にかかったりすると、
f1(x)内で変更したxの値がreturnされるxの値に反映されない可能性がある(f1(x)の呼び出し前後でxがレジスタに乗ったままであるとか、
290デフォルトの名無しさん
2019/04/14(日) 21:11:05.08ID:xbTIwD1q >>289
その x の型は const じゃないから return x は最適化できないよ。
その x の型は const じゃないから return x は最適化できないよ。
291デフォルトの名無しさん
2019/04/14(日) 21:48:29.79ID:uvZ0DMTi >>281
わからないです。それはメリット?
わからないです。それはメリット?
292デフォルトの名無しさん
2019/04/15(月) 01:36:50.54ID:20PlYkfs ラムダに11個の引数を参照で渡すのと、キャプチャするの、どっちが速いかな?
293デフォルトの名無しさん
2019/04/15(月) 02:40:05.27ID:e1RUhzz1 測ればいいだろ
295デフォルトの名無しさん
2019/04/15(月) 02:59:24.82ID:XbOtvNIU 参照渡しな時点でその場で呼び出すのだろ。
最適化かければ結局同じようなアセンブリになるよ。
最適化かければ結局同じようなアセンブリになるよ。
296デフォルトの名無しさん
2019/04/15(月) 09:13:13.35ID:+swIGlrx それはわからんだろ
ブロック待ちするかもしれないわけで
ブロック待ちするかもしれないわけで
297デフォルトの名無しさん
2019/04/15(月) 19:29:41.18ID:8vw8m6ly 引数で渡すとスタックに積まれる可能性があるけど、キャプチャするとそうならないのでは。
298デフォルトの名無しさん
2019/04/15(月) 19:36:28.26ID:XbOtvNIU いや、形式上は無名クラスにキャプチャを変数としてぶちこんだもののインスタンス作ってメンバ関数のoperator()呼ぶのだから、スタックは使うだろ。
299デフォルトの名無しさん
2019/04/15(月) 20:08:47.93ID:Auf6nZgf C言語じゃダメなんですか!
300デフォルトの名無しさん
2019/04/15(月) 20:20:07.70ID:NSErsM12 いいよ
301デフォルトの名無しさん
2019/04/15(月) 20:25:01.30ID:IXPbMXJW 無駄に複雑にしとるな。
302デフォルトの名無しさん
2019/04/16(火) 01:01:07.13ID:ZVmLHBMP >>298
じゃあ、引数で渡すとスタックに積まれない可能性があるので、速い場合もあるのでは?
じゃあ、引数で渡すとスタックに積まれない可能性があるので、速い場合もあるのでは?
303デフォルトの名無しさん
2019/04/16(火) 02:15:09.28ID:WfxisTJA 海外だと、Javaに負けて、Rustに圧倒的実力で追いやられるC++
304デフォルトの名無しさん
2019/04/16(火) 02:27:07.22ID:WfxisTJA305デフォルトの名無しさん
2019/04/16(火) 15:01:04.19ID:RMLQoksE 本当に、コンパイル時に何かしたいならRustだけどね
306デフォルトの名無しさん
2019/04/16(火) 18:28:44.44ID:ZVmLHBMP >>304
Java圧倒的な強さだな。
Java圧倒的な強さだな。
307デフォルトの名無しさん
2019/04/16(火) 18:30:10.89ID:ZVmLHBMP 全部足すと500%位になりそうだから、複数の言語を使う人が多いんだろね。
308デフォルトの名無しさん
2019/04/16(火) 21:18:54.40ID:dFuxCqAG 江添が転職できずに困っとるw
まあこいつがクソなだけでc++の問題ってわけじゃないんだがイメージは悪いわな。
まあこいつがクソなだけでc++の問題ってわけじゃないんだがイメージは悪いわな。
309デフォルトの名無しさん
2019/04/16(火) 21:36:49.03ID:jMhdT2ep こうしてみるとホッシーの全タクシー移動ってのは理に適ってるな
バカな公害に捕まる心配が減る
バカな公害に捕まる心配が減る
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- 【サッカー】58歳カズ「オファーが来ている」 J3福島と近日中にも交渉 早ければ年内にも決断 [征夷大将軍★]
- 【速報】気象庁は津波注意報すべて解除 [蚤の市★]
- 【悲報】高市早苗の擬人化がXで大バズりwwwwwwwwwwww [455031798]
- 【実況】博衣こよりのえちえち朝こよ🧪
- ヨッシー、ヘイホー、テレサ ←こいつらwwwwwwwww
- さかまた「過呼吸になった」かなた「耳聞こえない」ござる「声出ない」まつり「ご飯食べれない」
- くそしてかがやけ
- 【画像】カリカリ女、脱いだらすごい😨 [632966346]
