19/04/13 11:50:51.08 U0TmzhoK.net
全く関係ない話になるけど、JNI = Java Native Interface(?) なるものを使えば、
C++で OS 非依存のアプリが作れるんだね。多分。
C++からJavaの任意のメソッドを呼び出せるし、逆も可能なので、
グラフィックをJavaに描かせて、キーやマウスのイベントをJavaからC++に
伝達すればよさそう。すると、LinuxやAndroidで共通に動くC++アプリ(?)
が出来てしまう。wasmも必要ない。
201:デフォルトの名無しさん
19/04/13 15:06:42.85 nqhK1mlk.net
>>200
C++の部分はネイティブなのでOSに依存する
202:デフォルトの名無しさん
19/04/13 15:20:25.21 U0TmzhoK.net
スマン。CPU毎にバイナリは必要で、
clangに -macrh=xxx-xxx-xxx オプションを指定して CPUやOSを
指定してコンパイルしておくことを想定していた。
ただし、複数のCPU/OS向けのバイナリを1つのAPKにパッケージして、
使用時に自動選択する事が出来るらしい。
203:デフォルトの名無しさん
19/04/13 15:31:06.15 pwnjfljv.net
わざわざjavaを使わなきゃいけないのが気にくわない
その場合、javaだけで書くこと以上のメリットある?
204:デフォルトの名無しさん
19/04/13 15:32:58.01 U0TmzhoK.net
速度が速い。
205:デフォルトの名無しさん
19/04/13 15:33:33.54 MSTjQ8pp.net
てかそれってjavaのアプリ作っているだけじゃ
206:デフォルトの名無しさん
19/04/13 15:36:48.83 U0TmzhoK.net
Androidアプリは、Javaで書くのが基本とされてるけど、
Chromeブラウザなんかはきっと、C++で書いたものを ARMなどの
CPU向けのnative binaryに直し、それをAPKにパッケージ化して
配布してるのではなかろうか? AmazonのFire7 や Fire HD 8 などの
タブレットのCPUはどちらもARMらしい。スマホもARMが多いのかな。
207:デフォルトの名無しさん
19/04/13 15:38:37.67 U0TmzhoK.net
>>205
基本的な描画系と入力系をライブラリ化しておけば、メインロジック部分は
C++で書けると思うよ。
208:デフォルトの名無しさん
19/04/13 15:42:52.17 U0TmzhoK.net
さっき、AdoptOpenJDK なるものをインストールしてみたら、
java と javac コマンドが起動することを確認した。
多分このJDKは、Oracle フリーで無料でクローズド商用利用できると思う。
209:デフォルトの名無しさん
19/04/13 15:46:26.77 MSTjQ8pp.net
jniはjavaのプラットフォームにc++での開発成果物を持ち込むためのもので、そうでないならわざわざそんなもの使う意味は薄い
マルチプラットフォームなアプリを作りたいならQtなりwxなりを使った方が速いし楽
210:デフォルトの名無しさん
19/04/13 15:47:10.35 Uq+8Y9kK.net
>>208
でもいつ訴えられるかわからないから怖いですう。
211:デフォルトの名無しさん
19/04/13 15:58:39.59 U0TmzhoK.net
そもそも、Androidアプリにとってのシステムコール(API)とは、Javaの関数だと
思うので、この構造自体は Android における「最も高速なアプリ」になっている
と思う。
212:デフォルトの名無しさん
19/04/13 15:59:50.41 U0TmzhoK.net
>>210
一般アプリ作者は大丈夫だと思うな。一番危ないのは、オイラみたいに、
ToolKit作って儲けようなんて思ってる人なのさ。(^_^;)
213:デフォルトの名無しさん
19/04/13 16:11:49.69 U0TmzhoK.net
>>209
それらはサイズが大きい。
214:デフォルトの名無しさん
19/04/13 16:14:38.06 MSTjQ8pp.net
糞デカイ上に更新面倒なjavaのruntime入れさせるほうが害悪だろ
flashより糞度が高い
215:デフォルトの名無しさん
19/04/13 16:22:55.04 U0TmzhoK.net
AndroidはJREはプリインストール済みなんじゃないの?
オイラは実機持ってないので全く分からないんだな。
216:デフォルトの名無しさん
19/04/13 16:32:58.01 MSTjQ8pp.net
androidで実質c++でのアプリ開発する仕組みなら既にある
jniそのまま使うよりは大分マシ
217:デフォルトの名無しさん
19/04/13 16:36:12.19 jD4Gkzzm.net
>>216
どうやるの?
218:デフォルトの名無しさん
19/04/13 16:39:07.74 2fZ9oexv.net
何でグラフィックをわざわざJavaに?
>>217
QtならほぼC++で書ける
219:デフォルトの名無しさん
19/04/13 16:42:39.35 U0TmzhoK.net
Qt は、内部的に Backend で Java を使ってるのかな。
220:デフォルトの名無しさん
19/04/13 17:18:44.33 ubPOLJQD.net
なんかJavaを間違って理解してるっぽい。
221:デフォルトの名無しさん
19/04/13 17:21:04.26 YpOFfnix.net
>>219
もういい加減スレ違いだから消えてくれ
222:デフォルトの名無しさん
19/04/13 19:21:24.16 mZFqlfzi.net
vector に格納されてる値から添え字の番号を取得するための最も手軽な方法はなんでしょうか
イテレータから添え字番号を取得することはできますが、あくまで値からやりたいです
223:デフォルトの名無しさん
19/04/13 19:26:24.27 ujTcdvrD.net
格納してる値にインデックスの手がかりがないんだったら
findで探して結果のイテレータから取得するしかないな
224:デフォルトの名無しさん
19/04/13 19:26:44.48 2fZ9oexv.net
>>222
findしてdistance
225:デフォルトの名無しさん
19/04/13 19:31:01.29 mZFqlfzi.net
>>223-224
ありがとうございます
格納する値の範囲もサイズも小さいvectorなので、今回は辞書を作って対応しようと思います
226:デフォルトの名無しさん
19/04/13 19:42:14.61 2fZ9oexv.net
>>225
そんな単純な検索なら3行くらいなんだから作ればいいのに
227:デフォルトの名無しさん
19/04/13 20:12:30.52 mZFqlfzi.net
奇遇なことに辞書も三行くらいです
228:デフォルトの名無しさん
19/04/14 01:05:39.34 dZAE6IVm.net
そら奇遇ですな。
229:
19/04/14 06:41:11.16 AVvjfIV7.net
>>200
とても興味を覚えました
私は、そろそろ言語間でライブラリも共用されるべきだと考えています
一つの記述体で各言語共通というのはさすがに難しいにせよ、
Java のライブラリと同等なもの(名前と機能が共通のもの)が C++ にもあってもいいんじゃないか?と数年前から妄想しています…
230:デフォルトの名無しさん
19/04/14 07:17:55.90 /tPpXRHC.net
もうJavaのことは忘れて生きろ
231:デフォルトの名無しさん
19/04/14 07:42:20.38 YohaqxbG.net
JavaとC++に共通インターフェースを作るのは反対。
車輪の再発明にしかならない。自由を奪うだけの愚策。
232:
19/04/14 07:51:31.17 AVvjfIV7.net
>>231
強要するのではなく、オプション(選択肢)として提供するのはどうでしょうか?
233:デフォルトの名無しさん
19/04/14 08:04:00.89 YohaqxbG.net
>>232
共通ライブラリを使う側にとってはオプションであることは当然。
共通ライブラリを作る側の話をすべき。共通ライブラリの規格決定権者が増えすぎること自体が好ましくない。
これはEU諸国がトルコがEU参加することを拒否する感覚に近い。
234:
19/04/14 08:50:47.24 AVvjfIV7.net
>>233
私は EU には否定的(グローバリストの巣窟であり、普通選挙/自由選挙による合意形成をスキップするポジションを作って人を操作するからくり、トルコもたぶん目が覚めているのでは?)ですが、それはさておき、
すでにある java/classpath スケルトンを真似してしまおう、という低姿勢・低いプライドを貫くのであれば、規格策定者は基本要らなくなりませんか?だって真似するだけだし…
235:デフォルトの名無しさん
19/04/14 08:59:21.33 k2b6YaL9.net
まだC++98しか知らないと、取り残されますか。
236:デフォルトの名無しさん
19/04/14 09:09:36.38 YohaqxbG.net
まずは、Javaと瓜二つな C#、.NET、C++/CLIが今どうなっているか考えてみては。
237:L
19/04/14 09:28:45.12 Y1IcINvd.net
>>229
ちょっと話しはズレるけど、あなたの賛同で嬉しくなったので、入手した耳寄りな
情報を書いておこうと思う。既に知ってる人も当然いると思うけど、
WebAssemblyで作ったようなWebAppliは、ブラウザのURL欄やタイトルバーなどが
表示されてしまうのが難点として残っていた。ところがなぜかElectronでは消せて
いたのでChromeではなくChromiumを使っているからかと思っていた。
ところが、manifest.json なるものを書いて、HTMLにそのファイルを使うように
書いておいて、display プロパティーを standalone やfullscreen にすると、
URL欄が消せるらしい。
238:
19/04/14 09:41:42.35 AVvjfIV7.net
>>237
もう時代はすっかり html/css/js ですね…
VSCode も Electron ですし…
239:デフォルトの名無しさん
19/04/14 10:28:52.88 k2b6YaL9.net
質問を変えてみよう。
C++11やC++14のコードは、職場で取り入れられてますか。
240:デフォルトの名無しさん
19/04/14 11:49:20.77 q+cUY/8y.net
>>239
ガンガン取りいれてるよ。
なにげにでかいのが日本語識別子の保証。適切に使うと可読性が笑っちゃうくらい上がるw
ヘッダーのプロトタイプ宣言とかが特におすすめかな。
あとchar16_t/char32_tも結構ありがたい。WindowsとUNIX系のOS間で同じ文字コードとして共通で使える型が以前はなかったからね。
20でようやく入るみたいだが、なぜchar8_tを入れかったのか(´・ω・`)
std::initializer_listもかなり便利。型安全で個数も分かる上に、引数の一番後ろじゃなくてもいいので、cの...と違って気軽に使える。
あとよく使うのは範囲for文と、イテレータの簡略化かな。いくつかの演算子をオーバーロードすれば良いだけだから、
結構気軽に範囲for文対応のイテレータを書ける。
ラムダ式も関数の引数に直接関数を埋め込んだりできて便利。
241:
19/04/14 12:36:24.13 AVvjfIV7.net
>>240
>char16_t/char32_tも結構ありがたい
確かに
char16_t と u"" がなければ win32api W 系とか途方に暮れていたとおもいます… スレリンク(tech板:53番)
242:はちみつ餃子
19/04/14 12:43:45.83 +qOUcSLR.net
ガンガン最新を追うべきとまでは思わないけど、
C++11 は最低限度じゃないかなぁ。
243:デフォルトの名無しさん
19/04/14 14:27:39.08 6Gooiv09.net
17便利すぎ
variant,visit,lambda,if constexpr
のコンボで捗る
244:デフォルトの名無しさん
19/04/14 14:34:56.13 GSX89KOm.net
つーか今はもうC++11の機能は使わずにC++で書け!といわれても
やりきる自信がなくなった・・
245:デフォルトの名無しさん
19/04/14 14:39:38.95 krJLkXqZ.net
古い環境だと最近のサンプルがビルドできなくて困る
246:デフォルトの名無しさん
19/04/14 16:02:33.26 YQLb8Tsj.net
c++11とか名乗るから誤解されるんだよ。
c++++とかのがイメージ的に正しい。
247:デフォルトの名無しさん
19/04/14 16:06:36.29 dZAE6IVm.net
C#ってことか。
248:デフォルトの名無しさん
19/04/14 16:12:40.18 YQJCzKEv.net
repeat文って入らないの?
249:はちみつ餃子
19/04/14 16:16:59.50 +qOUcSLR.net
>>248
どんな機能?
250:デフォルトの名無しさん
19/04/14 16:20:53.89 YQJCzKEv.net
>>249
repeat(int i; n) で for(int i; i<n; i++) と同じ意味な機能
251:デフォルトの名無しさん
19/04/14 16:22:55.01 6Gooiv09.net
>>250
そんなどうでも良いもののために予約語追加する意味って
その文法じゃ初期値すら変えられない
252:デフォルトの名無しさん
19/04/14 16:24:45.44 6Gooiv09.net
初期値はi=0とかすればいいのか
でもそうなるとi=1にした場合何回ループするのか混乱しそう
253:デフォルトの名無しさん
19/04/14 16:32:41.09 IovzG98E.net
>>229
QtとかGtk、wxとか色々有るじゃん。。。
入れるの面倒くさいなら、Power Builder(だっけ?)とかの有料開発環境はVSを除いてマルチプラットフォームなライブラリが売りだぞ。
254:
19/04/14 16:36:01.32 AVvjfIV7.net
>>253
Java の人も C# の人も c++ の人も python も ruby も一緒の名前で一緒の機能が使えたら,コストの中でも一番高くつく勉強コストを減らせるのではないでしょうか
255:デフォルトの名無しさん
19/04/14 16:44:39.61 YQJCzKEv.net
>>251
Linuxのカーネルにrepeatマクロ大量にあるもん
256:はちみつ餃子
19/04/14 16:52:53.22 +qOUcSLR.net
>>255
ならマクロでいいじゃねぇか。
257:デフォルトの名無しさん
19/04/14 16:53:20.02 6Gooiv09.net
こんなので十分だろ
URLリンク(ideone.com)
258:デフォルトの名無しさん
19/04/14 16:59:12.33 6Gooiv09.net
>>254
wxでもQtでもメジャー言語のbinding位あるだろ
259:デフォルトの名無しさん
19/04/14 17:09:53.36 IovzG98E.net
>>254
うん。
それはまさにそうで、だからQt,Gtk,wxあたりのメジャー所は色んな言語にラッパーがある。
260:デフォルトの名無しさん
19/04/14 17:10:32.89 h7KNzBMl.net
webプログラマーなんですが、右辺値、fowardっていつ使うのか気になります
というかなんでそこまで、厳密に分ける必要があるのか
業務で使ってる方、使用例を教えてください
261:デフォルトの名無しさん
19/04/14 17:20:10.51 sCsh6GnA.net
右辺値というかムーブ関数の定義といらなくなるオブジェクトにstd::move付けとくのは絶対損にはならないからとりあえずやっとく
forwardはテンプレートライブラリ作るなら必須だけど自分では使ったことないなあ
262:さまよえる蟻人間
19/04/14 17:25:45.47 86P3zzV7.net
コピーにコストがかかる場合は、std::swapやstd::moveのが早い場合があるからね。ムーヴはコピーじゃなくて引っ越しだから。
263:デフォルトの名無しさん
19/04/14 17:27:07.70 YQLb8Tsj.net
まあ理論上はね。。そういう実装になってるかどうかはコード見ないとわからんけどね。
264:デフォルトの名無しさん
19/04/14 17:29:38.84 6Gooiv09.net
基本的には高速化が目的でmove使わなくてもなんとかなるが、
所有権絡むとmoveは必須になる
forwardはtemplateで引数渡すときにmoveやら参照やらの完全転送する場合必須
265:さまよえる蟻人間
19/04/14 18:16:04.21 86P3zzV7.net
ちょっと実際にやってみようか。コピーコンストラクタで十秒待つコードを書く。ムーヴコンストラクタとムーヴ代入でなにもしない。
この状態でstd::moveを使わないで代入すると十秒かかる。
266:さまよえる蟻人間
19/04/14 18:17:20.92 86P3zzV7.net
訂正。「コピー代入で十秒待つコードを追加」
267:デフォルトの名無しさん
19/04/14 18:47:05.84 xCvd3oj/.net
>>264
>所有権絡むとmoveは必須
必須とまでは言えない
T::T(const T& obj)
という通常のコピコンを定義して、コピコンの中でconst剥がししたら
とりあえず所有権の移動もmove無しで逝ける
268:はちみつ餃子
19/04/14 18:50:44.06 +qOUcSLR.net
>>260
高速化のために出来るのは、アルゴリズムのレベルでの工夫を別にすれば、出来ることはショートカットだ。
高速化とは近道なんだよ。
場合分けが出来るなら、どうしてもやらなければならないこと、やらなくてもいいことを「区別」できる。
区別できるなら、やらなくてもいいことは省略できる。
言語での区別が無くても、たとえば C でも区別を陽に書けばムーブみたいなことだって、そりゃあ出来るけども、
そんなクソ面倒くさいことはしたくないので言語でのサポートがあるとありがたい。
まあ速度的にそこまで必要ないってのなら、区別を積極的に利用しなくてもかまわないよ。
でも、必要なときに出来る方法が用意されているとうれしいし、
C++ を使うときというのはそれなりに実行速度が必要なときだろうし。
269:デフォルトの名無しさん
19/04/14 18:52:09.33 xCvd3oj/.net
とわいえ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は使った無いから知らん
270:デフォルトの名無しさん
19/04/14 18:53:54.12 xCvd3oj/.net
訂正orz、
誤:
Foo* m_pBigData;
BarWithBigData() : m_pBigData(new Foo[1000000000000] { }
正:
Foo* m_pBigData;
public:
BarWithBigData() : m_pBigData(new Foo[1000000000000]) { }
271:デフォルトの名無しさん
19/04/14 18:54:00.95 mEGAHR/Y.net
コピコンの中でconst剥がしってちょっと何言ってるか分からない
272:さまよえる蟻人間
19/04/14 18:55:03.68 86P3zzV7.net
十秒待つ待つコードはWindowsなら#include <windows.h>してSleep(10*1000);であり、
Linuxなら#include <unistd.h>してsleep(10);だ。
C++11ならstd::chronoに待つ関数があったはず。
273:さまよえる蟻人間
19/04/14 18:57:07.74 86P3zzV7.net
const_castだろ。jk
274:デフォルトの名無しさん
19/04/14 18:57:37.12 xbTIwD1q.net
>>271 「move無しで(未定義動作に)逝ける」ってことでしょ。
275:デフォルトの名無しさん
19/04/14 18:57:39.39 xCvd3oj/.net
>>271
こうじゃわ;
BarWithBigData::BarWithBigData(const BarWithBigData& rhs) { m_pBigData = rhs.m_pBigData; const_cast<BarWithBigData&>(rhs).m_pBigData = NULL; }
>>269もmoveコンストラの変わりに↑のように書いても逝ける
276:デフォルトの名無しさん
19/04/14 19:10:15.32 sCsh6GnA.net
まあ実際にはそんなムーブをゴリゴリ書くことはなくて
m_pBigDataをunique_ptr<array<Foo, 1000000000000>>にしてムーブctor、ムーブop=、デストラクタを=defaultにするけどな
277:デフォルトの名無しさん
19/04/14 19:21:51.01 kBfBajGR.net
auto_ptrよりヤバイ奴
const_castでconst外した後実際に書き換えてしまうとかw
278:デフォルトの名無しさん
19/04/14 19:38:34.53 xCvd3oj/.net
>>277
ちなconst T&で渡されたブツを関数内でconst_castして書き換えることはそれ自体は合法
ROM上のオブジェクトを渡して死ぬことは有り得るがしたら呼び出し側の違反
また最適化にしくるとしたらそれはコンパイラーのバグ
279:デフォルトの名無しさん
19/04/14 19:46:40.04 xbTIwD1q.net
>>278
ROM上になくても const T 型で構築されたオブジェクトを書き換えたら未定義動作になるから、
値が変わらない前提の最適化は許されてるよ。
const 無しで構築されたオブジェクトを指す const& の話と混同してそうだね。
280:デフォルトの名無しさん
19/04/14 19:53:21.04 uvZ0DMTi.net
質問: c🐴++のrust相対の優位性はなんですか?
281:はちみつ餃子
19/04/14 19:57:27.42 +qOUcSLR.net
>>280
正しくないコードをコンパイル出来る。
C++ はプログラマを信頼するのだ。
282:デフォルトの名無しさん
19/04/14 19:57:44.28 6Gooiv09.net
>>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). ]
283:デフォルトの名無しさん
19/04/14 20:14:45.20 xCvd3oj/.net
>>282
Depending on the type of the objectにおいてmay produce undefined behaviorである
すわなちオブジェクトの型によっては未定義動作に成りえる、
と言っているだけなのでconst T&渡しされたパラメータの書き換えがNGの祥子にはなんね
>>279
>const T 型で構築されたオブジェクトを書き換えたら未定義動作になる
それはそう。しかしconst T&渡しされた関数内でコンパイラはそれを判断できないから
そういった関数内で、参照型かポインタ型引数で関数に渡されたlvalueのconst_castした結果はあくまでlvalue扱い
のはず…
284:デフォルトの名無しさん
19/04/14 20:25:38.94 xbTIwD1q.net
>>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 が使われる可能性がある。
285:デフォルトの名無しさん
19/04/14 20:33:37.36 mEGAHR/Y.net
規格が云々言わなくても、9割のプログラマの意図に反してるで終わる話
頼むからそんなコードは頭の中にしまっといてほしい
286:デフォルトの名無しさん
19/04/14 20:37:26.81 6Gooiv09.net
つまりはそれ自体は問題ないが、constとして生成したオブジェクトを渡した瞬間にダメになると言うことか
で、渡すこと自体は制限できないから
プログラム中に罠を仕掛ける事が出来るわけだ。
287:デフォルトの名無しさん
19/04/14 20:39:28.07 6Gooiv09.net
てか、mutable付けとけば問題なくなるな。
288:デフォルトの名無しさん
19/04/14 20:40:25.78 6Gooiv09.net
const_castも要らないし良いことずくめじゃないかw
289:デフォルトの名無しさん
19/04/14 20:45:26.81 xCvd3oj/.net
>>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がレジスタに乗ったままであるとか、
290:デフォルトの名無しさん
19/04/14 21:11:05.08 xbTIwD1q.net
>>289
その x の型は const じゃないから return x は最適化できないよ。
291:デフォルトの名無しさん
19/04/14 21:48:29.79 uvZ0DMTi.net
>>281
わからないです。それはメリット?
292:デフォルトの名無しさん
19/04/15 01:36:50.54 20PlYkfs.net
ラムダに11個の引数を参照で渡すのと、キャプチャするの、どっちが速いかな?
293:デフォルトの名無しさん
19/04/15 02:40:05.27 e1RUhzz1.net
測ればいいだろ
294:はちみつ餃子
19/04/15 02:50:17.52 94OTneyx.net
>>291
メリットのときもデメリットのときもあるだろう。
295:デフォルトの名無しさん
19/04/15 02:59:24.82 XbOtvNIU.net
参照渡しな時点でその場で呼び出すのだろ。
最適化かければ結局同じようなアセンブリになるよ。
296:デフォルトの名無しさん
19/04/15 09:13:13.35 +swIGlrx.net
それはわからんだろ
ブロック待ちするかもしれないわけで
297:デフォルトの名無しさん
19/04/15 19:29:41.18 8vw8m6ly.net
引数で渡すとスタックに積まれる可能性があるけど、キャプチャするとそうならないのでは。
298:デフォルトの名無しさん
19/04/15 19:36:28.26 XbOtvNIU.net
いや、形式上は無名クラスにキャプチャを変数としてぶちこんだもののインスタンス作ってメンバ関数のoperator()呼ぶのだから、スタックは使うだろ。
299:デフォルトの名無しさん
19/04/15 20:08:47.93 Auf6nZgf.net
C言語じゃダメなんですか!
300:デフォルトの名無しさん
19/04/15 20:20:07.70 NSErsM12.net
いいよ
301:デフォルトの名無しさん
19/04/15 20:25:01.30 IXPbMXJW.net
無駄に複雑にしとるな。
302:デフォルトの名無しさん
19/04/16 01:01:07.13 ZVmLHBMP.net
>>298
じゃあ、引数で渡すとスタックに積まれない可能性があるので、速い場合もあるのでは?
303:デフォルトの名無しさん
19/04/16 02:15:09.28 WfxisTJA.net
海外だと、Javaに負けて、Rustに圧倒的実力で追いやられるC++
304:デフォルトの名無しさん
19/04/16 02:27:07.22 WfxisTJA.net
>>303
URLリンク(insights.stackoverflow.com)
305:デフォルトの名無しさん
19/04/16 15:01:04.19 RMLQoksE.net
本当に、コンパイル時に何かしたいならRustだけどね
306:デフォルトの名無しさん
19/04/16 18:28:44.44 ZVmLHBMP.net
>>304
Java圧倒的な強さだな。
307:デフォルトの名無しさん
19/04/16 18:30:10.89 ZVmLHBMP.net
全部足すと500%位になりそうだから、複数の言語を使う人が多いんだろね。
308:デフォルトの名無しさん
19/04/16 21:18:54.40 dFuxCqAG.net
江添が転職できずに困っとるw
まあこいつがクソなだけでc++の問題ってわけじゃないんだがイメージは悪いわな。
309:デフォルトの名無しさん
19/04/16 21:36:49.03 jMhdT2ep.net
こうしてみるとホッシーの全タクシー移動ってのは理に適ってるな
バカな公害に捕まる心配が減る
310:デフォルトの名無しさん
19/04/16 23:25:27.27 LsPOsuul.net
なんか私怨でもあるんかいな
311:デフォルトの名無しさん
19/04/16 23:41:35.10 InK+cNH/.net
喫煙者が目に入った途端癇癪起こして殴り掛りかかる狂犬なんだっけ?
312:デフォルトの名無しさん
19/04/17 00:03:12.24 vVzTJh6n.net
知らね
よく人を招いているようだし揉めたことがある人も少なくはないんじゃいか
313:はちみつ餃子
19/04/17 01:12:11.58 UWuCQ9XR.net
>>310-311
当事者の様々な主張の食い違いがあるので、結論としては「わからない」。
少なくとも彼自信の主張としては掴みかかってきたのを払いのけた結果として眼鏡が割れたということになっている。
(江添が殴りかかったわけではなく、むしろ防衛した側、と江添は主張している。)
江添が煙草について過激な意見を持っているのは確かだが、
シェアハウス内で禁煙場所であると合意がなされている場所で煙草を吸った客人がいたというところは当事者全体が認めているようだ。
314:デフォルトの名無しさん
19/04/17 08:21:52.75 DaACwh1w.net
恨みというかまともにコード書かない奴がクソ意見で現場荒らすって事自体がクソだと思うわけで、
まあその反動で現場で働くことができないって事になればザマァって思う。
315:デフォルトの名無しさん
19/04/17 09:46:31.27 vVzTJh6n.net
現場を荒らしてる?
316:デフォルトの名無しさん
19/04/17 09:53:30.15 vVzTJh6n.net
どのプロジェクトにも参加してないと認識してたけど乗り込んでケチつけてたりするのかな
まあ俺ドワンゴとは縁が無いからどこで何してようが関係ないけど
317:デフォルトの名無しさん
19/04/17 17:08:02.09 I32j715f.net
C++がPython抜いて3位 - 4月TIOBE言語ランキング 2019/04/17 10:55 後藤大地
URLリンク(news.mynavi.jp)
TIOBE Softwareから、2019年4月のTIOBE Programming Community Index (PCI)が公開された。
TIOBE PCIは、複数の検索エンジンの検索結果から、対象となるプログラミング言語が
どれだけ話題になっているかをインデックス化したもの。
4月TIOBE Programming Community Index / 円グラフ
URLリンク(news.mynavi.jp)
2019年4月はC++がPythonを抜いて3位に返り咲いた。ただし、Pythonのシェアが下落したの
ではなく、Pythonの増加傾向をC++の増加が上回ったことによる結果と思われる。C++は
長期にわたって下落傾向が続いていいたものの、2019年に入ってから増加傾向へ転じている。
Pythonも増加傾向が続いており、どちらも今後さらにインデックス値を増やす可能性がある。
長期にわたって1位を確保しているJavaは依然として1位のポジションにあるが、下落の
傾向が続いている。2位のC言語も長期で見ると下落を続けており、C++やPythonの存在感が
強くなってきている。
318:デフォルトの名無しさん
19/04/17 17:11:50.34 hoIwj+sG.net
>>317
何回だからみんな何回もググってるんだよ
319:デフォルトの名無しさん
19/04/17 18:34:58.84 LllPIzo0.net
俺が検索しまくったからだろうな。
320:デフォルトの名無しさん
19/04/17 19:59:29.56 fJF68+PR.net
今もしインターネットが完全にシャットダウンされると
プログラム書けなくなるプログラマけっこう数いるだろうな
321:はちみつ餃子
19/04/17 20:18:46.81 UWuCQ9XR.net
>>320
cpprefjp はとりあえず手元にダウンロードしてあるけど。
322:デフォルトの名無しさん
19/04/17 20:35:09.94 P5fp2rRi.net
どうやってダウンロードしたの?
巡集じゃできなかった…
323:デフォルトの名無しさん
19/04/17 20:39:18.77 WWgiT6Ow.net
githubじゃない?
324:デフォルトの名無しさん
19/04/17 21:27:54.32 P5fp2rRi.net
そうなんだ、ありがとう
325:デフォルトの名無しさん
19/04/19 02:16:29.43 /DYxLH/O.net
どういたしまして。
326:デフォルトの名無しさん
19/04/19 08:26:54.03 gmGy9oTC.net
江添は職質裁判でも、不当判決が出たので控訴するみたい
警官は、複数人で口裏合わせするから、民間人は勝てない
漏れもやられたけど、酒酔い運転でも、漏れが機械に息を吹き掛けても、ランプが点かない。
そこで、警官がクルッと後ろを向くと、ランプが点く
そっと見たら、酔っ払い警官が、自分で息を吹きかけて、ランプを点ける
こういう裁判で争っている人もいるけど、
警官は複数人で口裏合わせするから、絶対に勝てない!
警官は皆、このやり方で出世しとる
327:デフォルトの名無しさん
19/04/19 08:33:03.47 PWe5dNBv.net
ありゃ普通に対応してりゃ済む話だと思うがね。
やってることは完全に当たり屋だろ。
328:デフォルトの名無しさん
19/04/19 09:27:15.01 biH+fvR8.net
>>326
Rubyバカの人か。相変わらず思い込みが激しく、言っていることが滅茶苦茶だな。
329:デフォルトの名無しさん
19/04/19 12:05:02.85 rPSCrubJ.net
どんだけ江添好きなの?w
330:デフォルトの名無しさん
19/04/19 13:28:48.91 W5tFDDw/.net
日本でC++真剣にやってるのって彼だけだし
331:はちみつ餃子
19/04/19 13:41:25.74 mypEidUJ.net
だけ、というのは言い過ぎだと思うが、
日本語で最新の C++ の事情を本にしているのは江添くらいしかいないからなぁ。
江添本人は自分のことを実務家ではなく教育者だと考えているようだし、
(肩書は何なんだろ? エヴァンジェリストのようにも見えるが……)
今のポストは妥当なとこだろ。
そのままやってくれればありがたいもんだ。
332:デフォルトの名無しさん
19/04/19 13:41:50.58 i8rhoxHy.net
つまり他の日本人は竹刀とか木刀ってことか。
333:デフォルトの名無しさん
19/04/19 13:50:35.12 rPSCrubJ.net
江添個人の裁判は完全にスレチなんだよなあ
仮に違法な取り締まりだと判断されても警察のやり方が改まるわけもないだろうし
334:デフォルトの名無しさん
19/04/19 14:15:26.68 JVA9qfGz.net
江添すなわちC++なのだから
江添の話題は全てC++の話題だょ
335:デフォルトの名無しさん
19/04/19 15:08:33.32 j263LUSd.net
宗教の話はよそでやってくれないか
336:デフォルトの名無しさん
19/04/19 15:16:01.57 JwgM4FAg.net
もう少しc++の話をしてくれと思う事もある
337:デフォルトの名無しさん
19/04/19 18:50:10.05 /DYxLH/O.net
はちみつさんも真剣にやってると思います。
338:デフォルトの名無しさん
19/04/19 19:16:13.92 yj9Iz3m1.net
こんな事言うと勘違いされそうだが、はちみつ餃子はちゃんとしてると思うよ
C++に関しておかしなことは言っていない
ていうか、はちみつ餃子ってものすごい不味そうなんだがそんなの本当にあるのだろうか・・?
339:デフォルトの名無しさん
19/04/19 19:17:39.46 j263LUSd.net
肉料理にはちみつを入れること自体はわりと普通
量の問題
340:デフォルトの名無しさん
19/04/19 19:28:19.17 PWe5dNBv.net
いや明らかに開発してねーだろって感覚じゃねーか。
まあここならそれでもいいんだろうけれど。
341:はちみつ餃子
19/04/19 19:51:37.44 mypEidUJ.net
>>338
ググればわかるけどはちみつ餃子はそこそこありふれた料理だよ。
その昔、 higepon が自分でもどうして higepon などと名乗ったかわからない
と述べていたので、そのくらい意味不明感じにしようと思って適当に
思いついた語をコテハンにした。
Scheme スレが本来の住処なので当初は SCHEME餃子 と名乗っていたけど、
他のスレにも顔を出すようになったのでなんとなくはちみつ餃子になった。
およそ意味不明な組合せにしたつもりだったんだけど、
実際にある料理だとは後になってから知った。
342:デフォルトの名無しさん
19/04/19 21:11:54.81 fEN/Hp+M.net
initializer_listを引数に取るオブジェクトを引数に取る関数で
下記のケースでUniversal Initializationが効かないのですが
何かいい手はないでしょうか
using KVPCollectionType = std::map<std::string, std::string>;
void f(const KVPCollectionType&& kvps = {});
f(); // OK
f({}); // OK
f(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); // OK
f({{"key1", "value1"},{"key2","value2"}}); // NG これをやりたい!!
343:デフォルトの名無しさん
19/04/19 21:13:17.21 UQpKfTQY.net
エピ…いや何でもない
344:デフォルトの名無しさん
19/04/19 21:17:05.52 fEN/Hp+M.net
すみません、訂正です
× void f(const KVPCollectionType&& kvps = {});
○ void f(const KVPCollectionType& kvps = {});
345:デフォルトの名無しさん
19/04/19 21:22:53.30 /DYxLH/O.net
アークエンジェルに搭載されてるstd::variant<>。
346:デフォルトの名無しさん
19/04/19 22:49:42.25 DWxUZ3pl.net
wandboxで試したらclangでもgccでもc++11 -pedanticで通ったけど?
347:デフォルトの名無しさん
19/04/20 00:01:37.25 a7z6m7l4.net
ごめんなさい、ごめんなさい。本当にごめんなさい。
勝手に脳内で要約したのが間違えまくってました
正確には以下の通りです。
#include <map>
#include <memory>
using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
};
int main()
{
auto ok = std::make_shared<c>(KVPCollectionType{{"key1", "value1"},{"key2","value2"}}); // OK
auto ng = std::make_shared<c>({{"key1", "value1"},{"key2","value2"}}); // NG!!!
}
348:デフォルトの名無しさん
19/04/20 10:47:21.77 5oa1AZjP.net
全てのバグを絶滅せよ。
「今日は死に日和」好評発売中。
349:デフォルトの名無しさん
19/04/20 11:08:43.59 3kBWifqd.net
C++11や14を使ってる人、コンパイラは何ですか。
350:デフォルトの名無しさん
19/04/20 11:25:30.96 m+a2EYsq.net
ゲームエンジン作ってる人いますか
351:デフォルトの名無しさん
19/04/20 11:30:38.02 5oa1AZjP.net
clとgcc。
352:デフォルトの名無しさん
19/04/20 13:20:15.93 lwVpLCzw.net
c+11以降はバージョン違うと全く別のコンパイラ
353:デフォルトの名無しさん
19/04/20 13:23:19.12 8Vh3F1FF.net
Twitchでプログラミングしてるやつの中でゲームエンジンも居たような
354:はちみつ餃子
19/04/20 13:30:02.11 7hm/FBJ7.net
>>347
テンプレートの推論ルールとして「関数テンプレートのパラメータとして波カッコの初期化子リストを渡して型推論させることはできない。」
ということになっている。 ( URLリンク(cpprefjp.github.io) )
make_shared の実際の型は template <class T, class... Args> shared_ptr<T> make_shared(Args&&... args); なので、
このとき Args が推論できない以上はどうにもならん。
型を固定した専用の関数をはさんでこんな感じにするくらいのことしか思いつかないな。
#include <map>
#include <memory>
#include <initializer_list>
#include <utility>
using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
c(const std::initializer_list<typename KVPCollectionType::value_type>){}
};
std::shared_ptr<c> make_c_shared(std::initializer_list<typename KVPCollectionType::value_type> a) {
return std::make_shared<c>(std::move(a));
}
std::shared_ptr<c> make_c_shared(KVPCollectionType&& a) {
return std::make_shared<c>(std::move(a));
}
int main() {
auto ok = make_c_shared(KVPCollectionType{{"key1", "value1"},{"key2","value2"}});
auto ng = make_c_shared({{"key1", "value1"},{"key2","value2"}});
}
355:はちみつ餃子
19/04/20 13:32:51.70 7hm/FBJ7.net
>>347 >>354
呼出す側で
auto ng = std::make_shared<c, std::initializer_list<typename KVPCollectionType::value_type>>({{"key1", "value1"},{"key2","value2"}});
というように型を明記してもかまわないけど、使う側でいちいちこんなこと書きたいわけじゃないだろ?
356:はちみつ餃子
19/04/20 13:35:42.76 7hm/FBJ7.net
>>347
ちゃんと考えたら >>354 はいらんことしとるな……
これで充分か
#include <map>
#include <memory>
#include <utility>
using KVPCollectionType = std::map<std::string, std::string>;
class c {
public:
c(const KVPCollectionType&& kvps = {}){}
};
std::shared_ptr<c> make_c_shared(KVPCollectionType&& a) {
return std::make_shared<c>(std::move(a));
}
int main() {
auto ok = make_c_shared(KVPCollectionType{{"key1", "value1"},{"key2","value2"}});
auto ng = make_c_shared({{"key1", "value1"},{"key2","value2"}});
}
357:デフォルトの名無しさん
19/04/21 08:19:35.76 jJhiZdMc.net
>>354-356
ありがとうございます、その手を使わせていただきます
状況によって推定ルールが変わるのはやめて欲しいなってちょっと思ったんですけど。
358:デフォルトの名無しさん
19/04/22 23:55:58.01 uyfay/gq.net
メンバアクセスにthis->つける?
359:デフォルトの名無しさん
19/04/23 00:01:58.24 cW1os5L0.net
エディタの補完機能使いたいときにたまにそうやって補完して最後に消す。
が、たまに忘れる。
360:デフォルトの名無しさん
19/04/23 00:02:35.52 BSgCsXpz.net
IDEの都合で付ける事が良くある
付けないと補完候補多すぎて
361:デフォルトの名無しさん
19/04/23 00:09:08.10 JKfCESEZ.net
ああなるほど
補完候補を絞るのには便利ですね
362:デフォルトの名無しさん
19/04/23 18:16:01.64 Wx+D+gzo.net
メンバであるという保証ができるので付ける
363:デフォルトの名無しさん
19/04/23 19:39:28.32 cE0Yu4R7.net
メンバ名は頭にm_付けろみたいなクソルールよりずっといいと思うので付けるべき
364:デフォルトの名無しさん
19/04/23 19:42:38.83 JKfCESEZ.net
仮引数と別の名前つけるのだるいからm_は別に良いと思う
365:デフォルトの名無しさん
19/04/23 20:02:01.86 8XemHsTC.net
メンバ変数に専用の色付けたらいいじゃん
366:デフォルトの名無しさん
19/04/23 20:13:43.06 sktjqElV.net
引数そのままメンバに入れるなら引数に_つけてvar(_var)って初期化してるわ
367:
19/04/23 20:16:13.74 JSYnwir1.net
>>366
それって var(var) でも問題ないんですよ…
368:さまよえる蟻人間
19/04/23 21:18:06.78 DAl4rXky.net
バーバー
369:デフォルトの名無しさん
19/04/23 21:32:08.36 BSgCsXpz.net
>>367
綴り間違えたら悲惨なことになった
370:デフォルトの名無しさん
19/04/23 21:34:08.78 3k1+3l7a.net
ハンガリアン記法は、入力補完のないエディタ上での可読性を高めるのに役立ってるでしょ。今でも。
371:デフォルトの名無しさん
19/04/23 21:35:06.30 8XemHsTC.net
ゴミ使ってる奴のことなんか知らん
372:デフォルトの名無しさん
19/04/23 21:36:10.37 BSgCsXpz.net
あれ可読性落ちるだろ
373:デフォルトの名無しさん
19/04/23 21:39:11.30 lLaZpSEH.net
定期的にunsignedとsigned混在させてハマるアホをみるとハンガリアン必要だと思うわ
374:デフォルトの名無しさん
19/04/23 21:40:37.34 lAbUfbw7.net
C#で入力補完のないエディタがどうとかさすがにナンセンスでは
だってvisual studio使うじゃん
375:デフォルトの名無しさん
19/04/23 21:41:16.53 ZkNEZW45.net
どっちでもいいわ。
大抵の場合そんなとこに気を使わんといかんコードになってることのが問題。
376:デフォルトの名無しさん
19/04/23 21:45:47.89 lLaZpSEH.net
>>375
こういうやつがそのうちハマって丸1日つぶしたりするんだよなw
377:デフォルトの名無しさん
19/04/23 21:51:11.17 8XemHsTC.net
>>373
関係なくて草
378:デフォルトの名無しさん
19/04/23 21:55:03.06 lLaZpSEH.net
関係あることわかってなくて草
379:デフォルトの名無しさん
19/04/23 21:55:54.04 8XemHsTC.net
黙ってろゴミw
380:デフォルトの名無しさん
19/04/23 21:59:25.62 ZkNEZW45.net
>>376
だから人を嵌めるようなコード書くなつってんだよばか。
381:デフォルトの名無しさん
19/04/23 22:06:36.15 lLaZpSEH.net
>>380
コードの問題じゃなくて言語仕様の問題だから
こういうえらそうなくせに何もわかってないカスが一番始末に困る
382:デフォルトの名無しさん
19/04/23 22:53:19.60 ZkNEZW45.net
いつの間にかハンガリアンが言語仕様になってた。。
383:デフォルトの名無しさん
19/04/23 23:10:13.77 lLaZpSEH.net
ハンガリアンも防御的なプログラミングと考えたら悪くないよ
成り立ち調べてみな
でも基本型とポインタだけだな
クラスには無用だと思う
384:デフォルトの名無しさん
19/04/23 23:27:23.37 8XemHsTC.net
てめーらはまともなIDEかエディタ使ってねえのかよ
385:デフォルトの名無しさん
19/04/23 23:37:57.35 JKfCESEZ.net
むしろVSがないと何も書けない
386:デフォルトの名無しさん
19/04/23 23:55:15.96 UPBQPhwq.net
VSがあっても何も書けない。
387:デフォルトの名無しさん
19/04/23 23:55:30.60 ZkNEZW45.net
c++みたいに型情報ありがデフォルトの言語でハンガリアンとか二重メンテもいいとこだわ。
388:デフォルトの名無しさん
19/04/24 01:00:02.97 pnt3hUol.net
前方宣言したクラスをTにしたスマポメンバでコンパイル通るときと通らないときがあって調べてたら
デストラクタがインライン(暗黙)だと駄目だとわかった
しかもこの問題が起こるのはunique_ptrのときだけでshared_ptrはデストラクタの定義に関係なく通る
わけわからんぞ
教科書に書いておいてくれ
class ClassB;
class ClassA{
public:
ClassA();
private:
std::unique_ptr<ClassB> u; // NG
std::shared_ptr<ClassB> s; // OK
}
---
class ClassB;
class ClassA{
public:
ClassA();
~ClassA(); ←これでunique_ptrもOK
private:
std::unique_ptr<ClassB> u; // OK
std::shared_ptr<ClassB> s; // OK
}
389:デフォルトの名無しさん
19/04/24 07:38:59.52 IdP8M60W.net
>>388
unique_ptr<T>のデストラクタはインスタンス化するときにTが完全型であることを要求する(デストラクタで直接Tのデストラクタを呼ぶ)
unique_ptrを内包するクラスのデストラクタが暗黙だとクラス内でコンパイラによって実装されるけど、その場でunique_ptrのデストラクタを要求する
しかし、その翻訳単位内でTの定義が無ければコンパイルエラーとなる
unique_ptr<T>を内包するクラスのデストラクタがとりあえず宣言だけでもあると
実際の定義がある場所で同様の事が起こるので、その場所でTの定義が見つかればいい
その場合に定義を書かないと、コンパイラさんが適切な翻訳単位内に定義をおいてくれるみたい
shared_ptrは動的削除子のおかげでデストラクタが呼ばれるところで適切にデリータを定義し、デストラクタを呼ぶようになっているのでこの様な問題は起こらない
shared_ptr<T>のデストラクタ内ではTのデストラクタを直接呼び出すようなコードが無い
390:デフォルトの名無しさん
19/04/24 18:54:26.06 pnt3hUol.net
>>389
解説ありがとう
391:デフォルトの名無しさん
19/04/26 01:05:34.79 UW94aXeh.net
うーんC++プライマー8500円かぁ。本家のプログラミング言語C++第4版はもっとするし
情報量からすると安いが本一冊にポンと出すにはお高い……日本語である程度網羅的な本となるとこの2冊くらいよね
392:デフォルトの名無しさん
19/04/26 19:40:01.51 aJMYFNVy.net
set<double> って int のときと同様にちゃんとソートされるんですか?
393:デフォルトの名無しさん
19/04/26 20:34:04.97 Fns+A8Ou.net
NaNが無ければ大丈夫NaNじゃね
394:デフォルトの名無しさん
19/04/26 20:34:22.70 Fns+A8Ou.net
NaNが無ければ大丈夫NaNじゃね
395:デフォルトの名無しさん
19/04/26 22:17:06.30 PbDaLlJb.net
のちに永久保存される平成最後のスベり
396:デフォルトの名無しさん
19/04/26 23:59:20.16 LBUDtqYL.net
たしかにそうだな・・いよいよ平成最後なんだな
みなさん、>>393-394 みたいな事にならないよう、気をひきしめましょう
397:デフォルトの名無しさん
19/04/27 00:20:06.56 nrL5Mhiq.net
平成最後っていう言い回し使われすぎて嫌いになってきた
398:デフォルトの名無しさん
19/04/27 00:23:11.48 v7q7vgVx.net
イテレータの参照を次に移すときってなんでitr++ではなく++itrなの?
399:デフォルトの名無しさん
19/04/27 00:33:20.40 nrL5Mhiq.net
ヤフーでぐぐれ
400:デフォルトの名無しさん
19/04/27 01:04:24.73 oB7jkl++.net
素直な実装だとitr++より++itrのほうが速いんじゃないかなあ、となんとなくみんなが思っているから
401:デフォルトの名無しさん
19/04/27 01:07:57.61 v7q7vgVx.net
速度に差が出るのか
知らなかった
402:デフォルトの名無しさん
19/04/27 01:35:51.19 KjSesqKI.net
インクリメント後のイテレーターの値を返す処理の実装を考えると
先の場合はインクリメントしてそのまま渡せばいいけど
後の場合はインクリメント前の値を保存しといてそれを渡さないといけないので一手間かかるから
・・なんだけど諸々の最適化とか色んな条件とか考えたらそこまで差がでるかどうかはよくわからん
403:デフォルトの名無しさん
19/04/27 01:38:33.58 EJ6OYH9I.net
it++だと、戻り値をコピーしてとっておいてから、ポインタなりを進めた後にreturnする必要があるが、
++itだと、ポインタを進めた後に参照を返すだけでするからな。
404:デフォルトの名無しさん
19/04/27 01:39:08.58 EJ6OYH9I.net
被ったw
405:デフォルトの名無しさん
19/04/27 11:13:20.29 qp4sR6Ay.net
>>398
ite++と++iteなんて気持ちの問題
てか範囲for文使えばいい
406:デフォルトの名無しさん
19/04/27 11:46:20.51 Tan1PMrG.net
>>402-405
cppcheck にかけたらちゃんと警告出るね。
407:デフォルトの名無しさん
19/04/27 14:06:33.77 dwPa57iA.net
どうせ戻り値捨てるんだったら++itを選んでおいて損はない
無駄にit++を使うのは時期尚早な最不適化って奴だ
408:デフォルトの名無しさん
19/04/27 19:31:57.61 Ht8C3PIL.net
C++で書くんだから後置インクリメントの方がメインに決まってんじゃん
前置は異端だ
409:デフォルトの名無しさん
19/04/27 19:37:22.12 nrL5Mhiq.net
殺せ
410:デフォルトの名無しさん
19/04/27 20:12:28.01 uerCNQ9f.net
++C
411:デフォルトの名無しさん
19/04/27 20:53:36.82 hHA0b+W+.net
C++でいいんだよ。
規格は一歩進むけど、使ってるやつはbetter Cばかりってな
412:デフォルトの名無しさん
19/04/27 20:55:05.03 nrL5Mhiq.net
++C++まだかよ
413:デフォルトの名無しさん
19/04/27 22:37:09.45 Czz6ceI0.net
>>411
vectorとかstringとか使わんの?
414:デフォルトの名無しさん
19/04/28 03:35:47.43 c2OY2Ben.net
CArrayとCStringだぞ
コピコンは定義されてないから自分で作るぞ
415:デフォルトの名無しさん
19/04/28 11:01:20.49 DJV+PGkd.net
CArrayは、<algorithm>ヘッダーで定義された信頼性の高いユーティリティ関数を使えないのがね・・・。
416:デフォルトの名無しさん
19/04/28 13:46:52.13 nadmD8id.net
>>413
この思考がbetter C
417:デフォルトの名無しさん
19/04/28 14:25:38.47 n1RanWws.net
>>416
わけわからん
418:デフォルトの名無しさん
19/04/28 14:29:28.69 c2OY2Ben.net
俺がBest Cだ
419:はちみつ餃子
19/04/28 14:56:12.05 mA4VukHK.net
>>415
イテレータをうまいこと定義すれば使えるやつも結構あるんじゃね?
そうでもない?
420:デフォルトの名無しさん
19/04/28 15:37:56.41 UbqPSgHc.net
inconsistent begin/end types in range-based ‘for’ statement
gcc(g++) 8.2で -std=c++17オプションでコンパイルで
範囲forでこのエラーが出るんだが
begin endの型不一致の制限緩和されいるはずだよな?
原因わかる方いますか?
421:デフォルトの名無しさん
19/04/28 15:49:39.60 4R543R/q.net
>>415
GetData()とGetData()+GetSize()を渡せば、とりあえず動くんじゃね?
422:デフォルトの名無しさん
19/04/28 16:05:30.47 n1RanWws.net
>>420 比較演算子定義されてないとか?
423:デフォルトの名無しさん
19/04/28 16:22:25.11 UbqPSgHc.net
>>422
int _n = 0;
auto __begin = _container.begin();
auto __end = _container.end();
for (; __begin != __end; ++__begin) {
_n = *__begin;
}
比較演算子はちゃんと定義してるし
上のコードは何故かコンパイル通る
だけど
for (const auto _n : _container) {
//hoge
}
は何故か通らない
424:デフォルトの名無しさん
19/04/28 16:41:14.97 n1RanWws.net
範囲for文のconst autoをconst auto&かauto&&に変えるとどうなる?
425:デフォルトの名無しさん
19/04/28 16:43:13.35 UbqPSgHc.net
>>424
auto&&にした時のみエラーが増えます
cannot bind rvalue reference of type ‘const long unsigned int&&’ to lvalue of type
426:デフォルトの名無しさん
19/04/28 16:54:13.46 /ZzCGjK1.net
beginとendのシグニチャは?
427:デフォルトの名無しさん
19/04/28 17:02:57.34 UbqPSgHc.net
>>426
using iterator = typename std;;vector<int>::iterator;
using const_iterator = typename std;;vector<int>::const_iterator;
using my_iterator = MYIterator;
my_iterator begin();
iterator end();
const my_iterator begin() const;
const_iterator end() const;
const my_iterator cbegin() const;
const_iterator cend() const;
428:デフォルトの名無しさん
19/04/28 17:18:10.81 HBE/zmE6.net
これで動かん?
for (auto&& _n : _container) {
}
429:デフォルトの名無しさん
19/04/28 17:28:42.95 UbqPSgHc.net
>>428
動かないです
430:デフォルトの名無しさん
19/04/28 18:12:40.94 /ZzCGjK1.net
MYIteratorの実体がunsigned longみたいだけど
vector<int>::iteratorの実体がポインタだったらoperator!=の定義できなくない?
431:デフォルトの名無しさん
19/04/28 18:13:25.64 7uO4eV2c.net
>>420
wandboxで再現コード作って出直すか、それができないんならエスパーに頼んだほうがいいんじゃないかな。
URLリンク(mevius.2ch.net)
432:デフォルトの名無しさん
19/04/28 20:53:07.97 B+3vkW9O.net
>>423
bool operator != (~) const ← これ付け忘れてないか?
433:デフォルトの名無しさん
19/04/28 20:57:20.67 HwAGJ3yN.net
constつけ忘れは時々はまる
434:デフォルトの名無しさん
19/04/28 23:15:17.87 UbqPSgHc.net
>>427
自己解決
const iteratorとconst_iteratorが一緒だと勘違いしていた
const my_iteratorではなくmy_const_iteratorを実装して返り値とすべきでした
435:デフォルトの名無しさん
19/04/29 08:12:30.69 caHZo185.net
struct A{
int member;
};
struct B: A{
void run(){member = 0;}//ok
};
template<typename T>
struct TA{
T member;
};
template<typename T>
struct TB:TA<T>{
void run(){member = 0;}//NG。this->memberとするとok
};
クラステンプレートを継承してクラステンプレートを作成した場合にthisでないと継承元のメンバーが見えないのは仕様?
436:デフォルトの名無しさん
19/04/29 10:32:33.68 ytpB6N2f.net
仕様
一寸前までのmsvcではなぜか通っていたけど
437:デフォルトの名無しさん
19/04/29 11:47:53.29 atpu4K08.net
>>436
なんでそんな仕様になってるんだろう…
438:デフォルトの名無しさん
19/04/29 12:13:25.59 TWBg2sM/.net
>>437
2phase lookupだから
最初のTB解釈時にはTAが型引数一つのtemplate classであるという情報以外使わない
だいたいTAが特殊化される可能性があるだろ
439:デフォルトの名無しさん
19/04/30 10:16:07.47 5viqjSMx.net
8bitや16bitのintしか使えない環境で、
32bitなどの大きな数を扱うにはどうすれば良いですか?
変数をいくつかつなげて大きな数を表現できないかと思っているのですが、やり方が分りません。
ご存知の方いらっしゃいましたら教えて頂けると嬉しいです。
440:439
19/04/30 10:20:33.67 5viqjSMx.net
補足させて下さい。
足し算、引き算は出来るようにしたいです。
可能でしたら、掛け算や割り算もできると助かります。
441:デフォルトの名無しさん
19/04/30 10:25:07.05 l5C1eDEl.net
多倍長演算で検索
442:デフォルトの名無しさん
19/04/30 10:45:28.19 Cm5pFeJF.net
>>438
> だいたいTAが特殊化される可能性があるだろ
なるほどそりゃそうか、サンクス
443:
19/04/30 11:43:40.55 iYYZTFZo.net
>>439-440
スレリンク(tech板:51番)
近々、委譲をやめて継承に戻すつもりです
あと掛け算はkaratsubaを適用できる目処がたちました
x64 に特化してインラインアセンブラ化することも考えています
444:はちみつ餃子
19/04/30 12:03:49.54 MGpUBTsC.net
karatsuba はかなり桁数が多いときじゃないと効果がないとも聞くけど
445:
19/04/30 12:09:22.58 iYYZTFZo.net
>>444
多分それは乗算FFTのことかと
446:デフォルトの名無しさん
19/04/30 12:28:54.66 44LYo/LT.net
>>439
stdint.h で int_least32_t とか使えるのでは?
447:
19/04/30 13:43:58.68 iYYZTFZo.net
>>446
8bit/16bit CPU で int_least32_t とかはそもそも存在しないのでは?
448:デフォルトの名無しさん
19/04/30 14:19:40.82 44LYo/LT.net
>>447
「8bitや16bitのintしか使えない」を見て long や long long はもっと大きいんじゃないの?と思ったんだよ。
「整数型」の意味で"int"って書いてたんなら、確かに存在しない環境のことを言ってるのかもしれない。
その場合は ISO C/C++ の LONG_MAX の最低絶対値の要求に準拠できないってことになるんだけど。
449:デフォルトの名無しさん
19/04/30 14:19:47.17 gDkH0fQs.net
8bit pic用XCでもlongは32bitなのに
450:
19/04/30 15:03:05.44 iYYZTFZo.net
>>449
それはそれですごいインプリメンテーションですね…
8 bit PIC で 32bit int がさくさく書けちゃうとは、そのインプリメンターは根性がありますね、それか頭のねじが何本か外れていて「無理を無理と思わない人」とか…
451:デフォルトの名無しさん
19/04/30 15:29:16.24 0LsajAP1.net
shortは16bit固定でlongは32bit固定でしょ。何言ってんの?
452:デフォルトの名無しさん
19/04/30 16:18:35.89 coQMvXAj.net
>>451
いや、お前こそ何を言ってるんだ?
453:
19/04/30 16:37:10.66 iYYZTFZo.net
>>451
残念でした、short も long もインプリメンターが好きに実装していいのですっ!きりっ!
454:さまよえる蟻人間
19/04/30 16:45:08.36 lzNlO/OB.net
>>451
64-bit Linux でsizeof(long) が8だった。移植がある場合は<cstdint>使わんとあかん
455:デフォルトの名無しさん
19/04/30 17:46:03.06 bcA0O1+B.net
intが16bitならISOの規格は満たしてることになるかな。
32bit以上の長い整数はクラスと演算子オーバーロードで誤魔化すか。
頑張ってもリテラル表記もダメだろうから、使い勝手は悪いよな。
456:デフォルトの名無しさん
19/04/30 19:51:46.33 tnl21ewQ.net
>>451
うろ覚えだが
VC Win32bit: int 32bit long 32bit pointer 32bit
gcc Linux32bit: int 32bit long 32bit pointer 32bit -ここまでは同じ
VC Win64bit: int 32bit long 32bit pointer 64bit -int64_tで64bit整数
gcc Linux32bit: int 32bit long 64bit pointer 64bit
457:デフォルトの名無しさん
19/04/30 20:17:37.41 YvhWBPAF.net
既にLP64とかLLP64とかの呼び方が存在するんだから、そっちを使おうよ
URLリンク(ja.wikipedia.org)
458:デフォルトの名無しさん
19/04/30 20:34:29.38 4LCMFhXh.net
厳密なbit長が必要なときにintだのlongだの使っちゃ駄目よ
459:デフォルトの名無しさん
19/04/30 20:56:09.36 ba2OmOyM.net
じゃあ何を使えばいいの?
460:デフォルトの名無しさん
19/04/30 20:59:46.66 jq/I62+g.net
int_leastシリーズでは?
461:デフォルトの名無しさん
19/04/30 21:02:03.72 tJFiug19.net
intの配列のラッパーのようなものから再発明すりゃーいい
class Bignumber{
int number[4];
Bignumber(const String num){
for(int i=0; i<4; i++){
number[i] = //考えるのが面倒臭い
}
}
Bignumber operator+(){
//以下、延々とオペレータオーバーロードが続く
}
};
462:
19/04/30 21:02:11.05 iYYZTFZo.net
>>459
int64_t とか int32_t とか cstdint の面々を使うしかないでしょうね…私もデフォでそうするようになりました
463:デフォルトの名無しさん
19/04/30 21:08:03.86 0LsajAP1.net
あ…ありのまま 今 起こった事を話すぜ。
平成の終わりにいろんな奴からshort/longに対する認識の誤りを指摘される恥辱を味わった。
何言ってるかわからねーと思うが(以下略
464:デフォルトの名無しさん
19/04/30 21:08:35.71 QYmLdpSV.net
なんかもうビットという表現すら無くそうとしてるんじゃなかった?
465:デフォルトの名無しさん
19/04/30 21:19:14.38 l5C1eDEl.net
制限された環境で使える多倍長整数のライブラリくらいいくらでもありそうだけど
466:デフォルトの名無しさん
19/04/30 21:42:28.23 ba2OmOyM.net
>>462
なるほど、cstdint ですか!
教えてくださりありがとうございます
467:デフォルトの名無しさん
19/04/30 23:24:19.16 xHYWEb3z.net
ビット数を付けるのは、MISRA-C で決まっているだろ
int8, 16, 32
uint8, 16, 32
468:デフォルトの名無しさん
19/05/01 00:05:54.61 rGIFhODV.net
C++の規格上はintは16 bit以上(ターゲットのアーキテクチャで一番自然なサイズ
、longは32 bit以上
だったと思った
469:デフォルトの名無しさん
19/05/01 06:23:13.87 EdGuPz7E.net
class ClassA
class ClassB: public ClassA
class ClassA::ClassC
のときに、ClassBはClassAのサブクラスと言いますがClassCはなんと呼ぶものですか?
470:
19/05/01 06:32:09.33 JcO9/TOD.net
>>469
>class ClassA::ClassC
この意味はなんですか?
471:デフォルトの名無しさん
19/05/01 06:32:44.82 TS5dpT59.net
基底クラス
スーパークラス
親クラス
ベースクラス
472:デフォルトの名無しさん
19/05/01 06:56:41.43 q4ZM9Khf.net
細かいことを言えば、規格準拠の処理系でも
int32_t (ピッタリ32bit) が定義されるとは限らないのね。
int_fast32_t, int_least32_t なら定義される。
8bit単位じゃないCPUへの配慮らしいから、
普通の(この表現も危険だけど)コンピュータを使う分には
int32_t があると仮定して書いてもたいがい大丈夫だろうけど。
コンパイルエラーが出るから出たら対処、で十分かと。
473:デフォルトの名無しさん
19/05/01 07:06:00.95 EdGuPz7E.net
>>470
クラス内で定義したクラスです
class ClassA {
public:
...
private:
class ClassC;
ClassC * C;
}
class ClassA::ClassC {
...
}
の場合class ClassA::ClassC からClassA::を取るとコンパイルが通りません
474:デフォルトの名無しさん
19/05/01 07:25:40.44 shCLaGGL.net
「プログラミング言語C++」だと、入れ子クラス(nested class)とか
メンバクラス(member class)とか呼んでるみたい。
475:デフォルトの名無しさん
19/05/01 07:36:13.31 EdGuPz7E.net
おお、なるほど
ありがとうございます
476:デフォルトの名無しさん
19/05/01 09:29:42.19 HwrGV3PF.net
内部クラス(inner class)もよく聞くけど調べたらJava用語っぽいな
477:デフォルトの名無しさん
19/05/01 10:28:09.06 imZnb7dZ.net
Inner Class、Java用語なのか。そう呼んじゃってたわ
478:デフォルトの名無しさん
19/05/01 17:22:15.78 Ul5/0sra.net
今よみがえる構造体ネストの悪夢
479:はちみつ餃子
19/05/01 17:31:05.65 Gk4iJJA0.net
>>473-474
nested class は仕様にあるので、
これが公式な用語と思って良いみたいだね。
480:デフォルトの名無しさん
19/05/01 19:23:34.42 DLNQH846.net
以前、「完全さを求めるあまり今存在する良い物を犠牲にしてはならない」という趣旨のことわざをBBCハードトークで仄聞したのだが、原典はなんだろうか?
481:
19/05/01 19:59:09.50 JcO9/TOD.net
>>480
ググってヒットしたもののうち、これについてめぐらせています(ことわざとは関係ありません…)
URLリンク(www.kt.rim.or.jp)
この人(原著者)、最後まで間違ったままでいるような気がしてなりませんが、実際のところどうでしょうか
482:デフォルトの名無しさん
19/05/01 22:03:28.27 EdGuPz7E.net
>>479
ありがとう
483:デフォルトの名無しさん
19/05/04 17:19:13.49 x8LtSB02.net
>>480 URLリンク(en.wikipedia.org)
484:デフォルトの名無しさん
19/05/06 08:44:53.70 Omhj+R8I.net
ストリームの遅さは凄い凄すぎる。
ほとんどの場合、遅くても問題ないということはわかる。
でもあそこ迄遅くする必要があったのだろうか。
485:デフォルトの名無しさん
19/05/06 10:41:12.07 ZJRraXBB.net
突然何?
486:デフォルトの名無しさん
19/05/06 12:17:09.96 jqdyfBGc.net
3.5 ストリーム
URLリンク(sicp.iijlab.net)
これだろう
理想的にはこうなるべきだが、技術的には未だに追いついてないだけであり、将来的には解決される
なのでC++では他のどの言語も真似してない<<や>>がある
逆に言うとストリーム・プログラミングが主流になったらC++が主流の座に返り咲く
487:デフォルトの名無しさん
19/05/06 15:05:44.09 XjarcZ9f.net
今やどの言語もprintfのような書式付き文字列を指定する方式に回帰した(jsすら!)。
少なくとも書式付き出力に限れば、ストリームはプログラミング言語の中ではもう淘汰されてしまったんだと思うよ。
早いとこ、string::format()とかbasic_ostream::format()とか作ってほしいわ
488:デフォルトの名無しさん
19/05/06 15:24:11.52 ecbY6TsO.net
多言語対応するためにはC#みたいに %1, %2みたいに引数を番号で指定できる書式じゃないとダメでしょ。
489:デフォルトの名無しさん
19/05/06 15:30:05.12 HRNpJ9Fc.net
ストリームの精神はrangeに受け継がれて生き残るよ
だから書式はそろそろ負けを認めよう
490:デフォルトの名無しさん
19/05/06 16:03:09.57 ZJRraXBB.net
どうしてprintf使わないの?
491:デフォルトの名無しさん
19/05/06 16:28:48.00 YSlWnmwv.net
オーバーロードできないから
492:デフォルトの名無しさん
19/05/06 16:36:53.99 oGUqqIoM.net
<<には<<なりの良さがあると思うので、ストリームというより、stringがoperator <<をサポートすれば良いと思う。
493:デフォルトの名無しさん
19/05/06 16:40:04.95 DF3zK1Xx.net
文字列操作するためのインターフェイスとしては最悪だよ。
考えた奴は自分では絶対使わないで人に使わせるだけのタイプだろうな。
494:デフォルトの名無しさん
19/05/06 16:45:40.32 Yv9FD/Sb.net
そもそもだけど、なんで文字って表示されるのに
<< とか %s とかこういうのが必要なの?
どの言語でもprint(a);だけで表示させればよくない?aが文字列でも整数でも小数でもさ。
引数で判断してくれよ。
495:デフォルトの名無しさん
19/05/06 16:51:17.77 oGUqqIoM.net
>>493
え、そう?
文字列を連結する時に、+=と+を使い分けるより<<だけですむ方が楽だし、連結する順番も自明だし結構良くない?
std::string str;
str << "hoge" << 123 << ".txt";
みたいな。
496:
19/05/06 17:27:51.75 vu8V8zIe.net
>>492
それは私も考えていました、cerr に都度吐いているメッセージを、もう一度プログラムの最後にまとめて吐きなおす、とかをやってみたいんです…
497:デフォルトの名無しさん
19/05/06 17:37:23.51 QULX0INn.net
>>495
そのやり方は引数の順序を変えられないから語順が違う言語間での翻訳で困る
498:デフォルトの名無しさん
19/05/06 17:37:57.33 ecbY6TsO.net
コンストラクタの引数に出力先stringインスタンスを渡すostream派生クラスを作ればいいじゃない。
string str;
hogestream sstr(str);
sstr << "hoge" << 128;
499:デフォルトの名無しさん
19/05/06 17:42:30.68 B4KNKrTg.net
別にstringstreamで良いじゃない
500:デフォルトの名無しさん
19/05/06 17:42:46.83 B4KNKrTg.net
別にstringstreamで良いじゃない
501:デフォルトの名無しさん
19/05/06 18:13:11.14 L6nFhRY+.net
iostreamの<<はC++の黒歴史の一つだね
502:はちみつ餃子
19/05/06 18:19:09.50 K/rO19sE.net
stream の機能はいらんからとにかく文字列に差し込むだけ出来ればいいってのなら
単に operator<< を定義すれば出来るけど……。
URLリンク(wandbox.org)
503:デフォルトの名無しさん
19/05/06 18:27:12.43 ecbY6TsO.net
>>499,500,501
ostream派生クラスじゃなくて独自のクラスのほうが軽量でいい。
stringインスタンスへのポインタのほかに、数値書き込み時の進数設定(oct,dec,hexを覚えておく)などをメンバ変数に持てばOK。
504:デフォルトの名無しさん
19/05/06 18:58:24.90 oGUqqIoM.net
>>502
をを、なるほど、これは素晴らしいw
505:デフォルトの名無しさん
19/05/06 21:02:54.05 ZJRraXBB.net
>>492
stringstream・・・
506:デフォルトの名無しさん
19/05/07 19:51:10.38 FbrTB0S1.net
basic_ostream使えよっていつも思う
なんで決め打ちするのかわからない
507:デフォルトの名無しさん
19/05/08 21:52:50.27 iQQm+nuQ.net
to_charsというものをみつけました。
508:デフォルトの名無しさん
19/05/09 18:03:02.17 PdPEbd3c.net
b配列全てをa配列のケツにコピーするとき
std::vector<char> a;
char b[]={0,1,1,3,4};
a.insert(a.begin(),&b[0],&b[sizeof b]);
これでいいの?
&b[sizeof b]
これが死ぬほど気持ち悪いんだけど
509:デフォルトの名無しさん
19/05/09 18:18:44.76 JXKWFyOS.net
そんな気色悪い書き方しなくてもこれでいいよ
a.insert(a.end(), std::begin(b), std::end(b));
510:デフォルトの名無しさん
19/05/09 18:25:51.81 PdPEbd3c.net
なるほど!ありがとう
511:はちみつ餃子
19/05/09 18:44:16.05 IVoLxnXn.net
>>508-509
std::copy に back_inserter を渡す方が効率的という豆知識。
512:デフォルトの名無しさん
19/05/09 18:53:31.44 vbHvKAwn.net
>>511
insertのが速いんでね?
resizeしてmemcpyになるはず
513:デフォルトの名無しさん
19/05/09 23:40:45.34 q7ofaYCv.net
アルゴリズムよりvector::insertのほうが実装による最適化の余地は大きそうだな
514:デフォルトの名無しさん
19/05/10 00:47:30.50 5C678nxv.net
ポインタがイテレータとして渡された時点で相手が連続バッファだってわかるからね
515:デフォルトの名無しさん
19/05/10 11:00:01.95 KAkBQh2y.net
&b[sizeof b]でもstd::end(b)でもやってることは変わらないんだけどな
見映えは重要だな
516:デフォルトの名無しさん
19/05/10 11:08:59.15 pPfi71KH.net
sizeof bじゃcharでしか使えないんで、そういう意味でもイケてないかも
517:はちみつ餃子
19/05/10 12:01:59.87 g2QrvVju.net
>>515
見栄えというか、名前が付いているってのはそれだけで単純にわかりやすいな。
(名前が妥当であれば。)
518:デフォルトの名無しさん
19/05/10 19:02:43.61 UhKi+qPE.net
嫌儲で、東京五輪チケットのソースコードが出てるけど
C++使ってるお前らなら、こんなソースコードじゃないよね?
URLリンク(gogotsu.com)
519:デフォルトの名無しさん
19/05/10 19:05:10.83 curN/h5M.net
>>518
サーバーサイドあまりやってないけどこんな泥臭い書き方するのか
520:デフォルトの名無しさん
19/05/10 19:05:16.55 TAwz/zT/.net
javascriptやん
521:デフォルトの名無しさん
19/05/10 19:36:57.50 tfYAY6pz.net
こんなもんだろ
SIerが間違ってコンシューマ系のWeb制作を請けてしまうとこんな感じになる
522:デフォルトの名無しさん
19/05/10 21:47:05.61 oOPMkjEw.net
てかこんなもの韓国に出すのね
安くなさそう
ってもしや北の方?
523:デフォルトの名無しさん
19/05/10 21:53:19.07 oOPMkjEw.net
parseInt(Num).lengthって動かなそう
524:デフォルトの名無しさん
19/05/10 21:57:58.16 TAwz/zT/.net
ほんまやw桁でも返ってくるのかと思ったがundefinedじゃんかw
525:デフォルトの名無しさん
19/05/10 22:59:11.84 HK1/2Yro.net
型に無駄にこだわった結末がstreamと知っとくのは重要。
あの間違いを覚えとけ。
526:デフォルトの名無しさん
19/05/10 23:25:31.58 u3uVdMgu.net
ゲームのシーンを管理するクラスとシーンクラスがあり、管理するクラスはシーンクラスを保持しています
シーンクラスから管理クラスのシーンチェンジを行う関数を呼び出したいのですがどうやったらいいでしょうか
シーンクラスが管理クラスのインスタンスを持ちたくありません
527:デフォルトの名無しさん
19/05/10 23:30:31.35 0WVRNDv3.net
>>518
webにあげるなら難読化まではしないにしても最低限圧縮するよね
528:デフォルトの名無しさん
19/05/10 23:55:31.69 tshfuAdx.net
>>526
シーンクラスに管理クラスへの参照(ポインタ)を持たせればいいんじゃないのか
529:デフォルトの名無しさん
19/05/11 03:16:15.93 xsmcwCcm.net
早速情報漏洩やらかしたの?
530:デフォルトの名無しさん
19/05/11 10:30:07.92 f5HniSEP.net
>a.insert(a.begin(),&b[0],&b[sizeof b]);
>
これ、添字オーバーしてるけどメモリエラーとかにならないの?
531:デフォルトの名無しさん
19/05/11 10:54:36.87 RjxICFG6.net
>>530
イテレータ範囲のendは配列の場合最後の要素の次のアドレス
それは普通の実装ではアクセスされることはない
規格的にも最後の次の要素へのポインタだけは未定義じゃない
532:デフォルトの名無しさん
19/05/11 11:55:52.83 Y1ZlGg0p.net
>>530
アクセスしてるからダメそう
533:デフォルトの名無しさん
19/05/11 12:40:07.82 3XjGQ6E0.net
[]はただのアドレス計算じゃん
534:デフォルトの名無しさん
19/05/11 12:42:52.29 DVWj7ai3.net
&p[N]はp + Nと同じって規格にあったっけ?
535:デフォルトの名無しさん
19/05/11 12:44:31.45 RjxICFG6.net
確かに&b[sizeof b]はデリファレンスしてるわ
これはあかんそう
536:デフォルトの名無しさん
19/05/11 12:56:49.51 FaKAPAIh.net
>>533
a[i]は a+i ではなく *{a+i}
537:デフォルトの名無しさん
19/05/11 13:12:17.25 2v2BzL6t.net
経験上出来るプログラマーは言語オタクが多いイメージ?(ただし浅い)
538:デフォルトの名無しさん
19/05/11 18:44:16.82 fU686pnk.net
&*pはデリファレンスなしで単にpと評価するってどっかで特別に決められてなかったっけ?
539:デフォルトの名無しさん
19/05/12 06:58:46.18 x4ccFx6b.net
>>530
int a[5];
int *p = &a[5];
というコードが有効、つまり
「配列の最終要素の次の要素」(現実には存在しないデータ)のアドレスを取れる、
という仕様から、この場合は許される、というのが >>531 の指摘か。
一般的に >>538 が成り立つなら便利だけど、調べ切れなかった。
流れの元になった >>508 を見返したら、
a.insert(a.begin(),&b[0],&b[sizeof b]);
これだと b[] の内容はベクタ a の先頭に挿入されちゃうね。
540:デフォルトの名無しさん
19/05/12 07:43:52.68 2y1+p9UL.net
>>530
>>a.insert(a.begin(),&b[0],&b[sizeof b]);
>>
>
>これ、添字オーバーしてるけどメモリエラーとかにならないの?
508だけど、これは
a.insert(a.begin(),&b[0],&b[sizeof b]);
こっちの間違いです。ごめんなさい。
a.insert(a.end(),&b[0],&b[sizeof b]);
&b[sizeof b]);
この部分は
b+sizeof(b)
これなら問題ない感じ?
どちらでも動くけど、たまたまいてる可能性捨てきれないから不安なんだよね。
実際のソースはsizeof(b)がbに格納されているデータのサイズを示していて、
char b[256];
int s = read( fd, b, sizeof b);
a.insert(a.end(),&b[0],&b[s]);
みたいな感じで書いてます。
んで、b最大数来た場合にちゃんと動くか気になったというわけっす。
int s = read( fd, b, (sizeof b)-1);
無難にこれの方がいいですかね?
541:デフォルトの名無しさん
19/05/12 11:19:05.13 k8bUqGvO.net
>>539
>int *p = &a[5];
これは多分だめで、ポインタ値としての存在なら許される
int *p = a+5;
542:デフォルトの名無しさん
19/05/12 11:53:09.39 nuZIUjqi.net
ややこしいからoperator <<を定義しようw
543:デフォルトの名無しさん
19/05/12 15:25:00.10 8/5ODvoI.net
VC++だと
std::vector<T> a; &a[a.size()]はoperator[]のassertionに引っかかるね
544:デフォルトの名無しさん
19/05/12 22:25:11.86 yr8YjJOU.net
std::transformって並列処理されてますか?
545:デフォルトの名無しさん
19/05/12 23:20:05.82 jFoQmc6B.net
c++17のparallel版使えば並列実行されるかもしれない
546:デフォルトの名無しさん
19/05/13 01:24:36.27 RKe/NLvg.net
visual studioでC++17にしたけどいまいち並列版の使い方が分からなかった
普通にfor回すのと、OpenMP使ってfor並列化するのと、transform(非並列)使うの比較したら
OpenMP>普通にfor≧transform だった
547:デフォルトの名無しさん
19/05/13 20:49:38.54 YS57w6Jq.net
おとなしくpthead使えよ。
548:デフォルトの名無しさん
19/05/13 20:56:12.40 WUu3P+2G.net
非並列使ったならそりゃそうなるだろ
549:デフォルトの名無しさん
19/05/16 02:02:33.17 1v50lv4I.net
struct AとAを継承したstruct Bがあって
Aの内容をBの共通部分にコピーする方法ってないですか?
A a;
B b = a;
みたいにしたいんですけど親を派生先にキャストはできないので困ってます
550:デフォルトの名無しさん
19/05/16 02:06:57.91 mZDDPYlt.net
struct B : public A
{
B* operator=(const A& a){ this->hoge = a.hoge;}
};
これ初期時にも使えるんかな
551:デフォルトの名無しさん
19/05/16 02:25:05.62 1v50lv4I.net
コピーコンストラクタが実装できたとしてメンバ変数は1個ずつコピーするしかないですかね
552:デフォルトの名無しさん
19/05/16 02:28:08.55 mZDDPYlt.net
スライシングをさせるとか?
安全に?スライシング起こす方法ってあったっけな?
なんか危ういからやろうともしなかったが
553:デフォルトの名無しさん
19/05/16 06:25:17.13 /dAesd8e.net
cloneメソッド用意するとか
554:デフォルトの名無しさん
19/05/16 06:31:42.80 ebJ8HHSX.net
>>549
初期化時は普通にコンストラクタ初期化リストで A(a) って書けるでしょ。残りのメンバをどうするのか知らんけど。
代入なら static_cast<A&>(b) = a か b.A::operator=(a) で済みそう。
555:デフォルトの名無しさん
19/05/16 06:33:37.60 C3C4SHXA.net
普通にコンストラクタかオペレーター作ればいいんじゃね
B::B(const &A)
B::operator =(const &A)
A::operator B()
雑なキャストでよければdynamic_cast<A>でおk
556:デフォルトの名無しさん
19/05/16 06:38:27.18 C3C4SHXA.net
↑dynamic_cast<B>の間違い
B b = dynamic_cast<B>(a);
557:デフォルトの名無しさん
19/05/16 11:40:14.21 74mGoL8y.net
>>551
sturctでまとめればデフォルトコピーコンストラクタが使えるけどね。
あとはintとかPODオブジェクトだけだったらmemcpyしちゃうとかも、俺はたまにやるなw
558:デフォルトの名無しさん
19/05/16 17:20:00.24 PgzYowjZ.net
549です
解決しましたありがとうございます
以下のように書いたら思っていたことが出来ました
(派生先のコンストラクタで親のデフォルトコピーコンストラクタ呼べるの知りませんでした)
代入は現状使う予定がないので大丈夫です
B::B(const &A a) : A(a) {}
559:デフォルトの名無しさん
19/05/16 18:17:29.46 mr2QiBZl.net
その内容だったら=defaultでいいよ
560:デフォルトの名無しさん
19/05/16 21:32:58.41 /aEDSlbd.net
引数付きコンストラクタって、=default使えるの?
561:デフォルトの名無しさん
19/05/16 22:09:55.18 jJO9F8Je.net
使えないよね
うかうかっと読み過ごしてたわw