◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

C++相談室 part142 ->画像>13枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1554124625/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

401デフォルトの名無しさん2019/04/27(土) 01:07:57.61ID:v7q7vgVx
速度に差が出るのか
知らなかった

402デフォルトの名無しさん2019/04/27(土) 01:35:51.19ID:KjSesqKI
インクリメント後のイテレーターの値を返す処理の実装を考えると
先の場合はインクリメントしてそのまま渡せばいいけど
後の場合はインクリメント前の値を保存しといてそれを渡さないといけないので一手間かかるから
・・なんだけど諸々の最適化とか色んな条件とか考えたらそこまで差がでるかどうかはよくわからん

403デフォルトの名無しさん2019/04/27(土) 01:38:33.58ID:EJ6OYH9I
it++だと、戻り値をコピーしてとっておいてから、ポインタなりを進めた後にreturnする必要があるが、
++itだと、ポインタを進めた後に参照を返すだけでするからな。

404デフォルトの名無しさん2019/04/27(土) 01:39:08.58ID:EJ6OYH9I
被ったw

405デフォルトの名無しさん2019/04/27(土) 11:13:20.29ID:qp4sR6Ay
>>398
ite++と++iteなんて気持ちの問題
てか範囲for文使えばいい

406デフォルトの名無しさん2019/04/27(土) 11:46:20.51ID:Tan1PMrG
>>402-405
cppcheck にかけたらちゃんと警告出るね。

407デフォルトの名無しさん2019/04/27(土) 14:06:33.77ID:dwPa57iA
どうせ戻り値捨てるんだったら++itを選んでおいて損はない
無駄にit++を使うのは時期尚早な最不適化って奴だ

408デフォルトの名無しさん2019/04/27(土) 19:31:57.61ID:Ht8C3PIL
C++で書くんだから後置インクリメントの方がメインに決まってんじゃん
前置は異端だ

409デフォルトの名無しさん2019/04/27(土) 19:37:22.12ID:nrL5Mhiq
殺せ

410デフォルトの名無しさん2019/04/27(土) 20:12:28.01ID:uerCNQ9f
++C

411デフォルトの名無しさん2019/04/27(土) 20:53:36.82ID:hHA0b+W+
C++でいいんだよ。
規格は一歩進むけど、使ってるやつはbetter Cばかりってな

412デフォルトの名無しさん2019/04/27(土) 20:55:05.03ID:nrL5Mhiq
++C++まだかよ

413デフォルトの名無しさん2019/04/27(土) 22:37:09.45ID:Czz6ceI0
>>411
vectorとかstringとか使わんの?

414デフォルトの名無しさん2019/04/28(日) 03:35:47.43ID:c2OY2Ben
CArrayとCStringだぞ
コピコンは定義されてないから自分で作るぞ

415デフォルトの名無しさん2019/04/28(日) 11:01:20.49ID:DJV+PGkd
CArrayは、<algorithm>ヘッダーで定義された信頼性の高いユーティリティ関数を使えないのがね・・・。

416デフォルトの名無しさん2019/04/28(日) 13:46:52.13ID:nadmD8id
>>413
この思考がbetter C

417デフォルトの名無しさん2019/04/28(日) 14:25:38.47ID:n1RanWws
>>416
わけわからん

418デフォルトの名無しさん2019/04/28(日) 14:29:28.69ID:c2OY2Ben
俺がBest Cだ

419はちみつ餃子 ◆8X2XSCHEME 2019/04/28(日) 14:56:12.05ID:mA4VukHK
>>415
イテレータをうまいこと定義すれば使えるやつも結構あるんじゃね?
そうでもない?

420デフォルトの名無しさん2019/04/28(日) 15:37:56.41ID:UbqPSgHc
inconsistent begin/end types in range-based ‘for’ statement

gcc(g++) 8.2で -std=c++17オプションでコンパイルで
範囲forでこのエラーが出るんだが
begin endの型不一致の制限緩和されいるはずだよな?
原因わかる方いますか?

421デフォルトの名無しさん2019/04/28(日) 15:49:39.60ID:4R543R/q
>>415
GetData()とGetData()+GetSize()を渡せば、とりあえず動くんじゃね?

422デフォルトの名無しさん2019/04/28(日) 16:05:30.47ID:n1RanWws
>>420 比較演算子定義されてないとか?

423デフォルトの名無しさん2019/04/28(日) 16:22:25.11ID:UbqPSgHc
>>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デフォルトの名無しさん2019/04/28(日) 16:41:14.97ID:n1RanWws
範囲for文のconst autoをconst auto&かauto&&に変えるとどうなる?

425デフォルトの名無しさん2019/04/28(日) 16:43:13.35ID:UbqPSgHc
>>424
auto&&にした時のみエラーが増えます
cannot bind rvalue reference of type ‘const long unsigned int&&’ to lvalue of type

426デフォルトの名無しさん2019/04/28(日) 16:54:13.46ID:/ZzCGjK1
beginとendのシグニチャは?

427デフォルトの名無しさん2019/04/28(日) 17:02:57.34ID:UbqPSgHc
>>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デフォルトの名無しさん2019/04/28(日) 17:18:10.81ID:HBE/zmE6
これで動かん?
for (auto&& _n : _container) {
}

429デフォルトの名無しさん2019/04/28(日) 17:28:42.95ID:UbqPSgHc
>>428
動かないです

430デフォルトの名無しさん2019/04/28(日) 18:12:40.94ID:/ZzCGjK1
MYIteratorの実体がunsigned longみたいだけど
vector<int>::iteratorの実体がポインタだったらoperator!=の定義できなくない?

431デフォルトの名無しさん2019/04/28(日) 18:13:25.64ID:7uO4eV2c
>>420
wandboxで再現コード作って出直すか、それができないんならエスパーに頼んだほうがいいんじゃないかな。
https://mevius.2ch.net/test/read.cgi/tech/1187922645/

432デフォルトの名無しさん2019/04/28(日) 20:53:07.97ID:B+3vkW9O
>>423
bool operator != (〜) const ← これ付け忘れてないか?

433デフォルトの名無しさん2019/04/28(日) 20:57:20.67ID:HwAGJ3yN
constつけ忘れは時々はまる

434デフォルトの名無しさん2019/04/28(日) 23:15:17.87ID:UbqPSgHc
>>427
自己解決
const iteratorとconst_iteratorが一緒だと勘違いしていた
const my_iteratorではなくmy_const_iteratorを実装して返り値とすべきでした

435デフォルトの名無しさん2019/04/29(月) 08:12:30.69ID:caHZo185
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デフォルトの名無しさん2019/04/29(月) 10:32:33.68ID:ytpB6N2f
仕様
一寸前までのmsvcではなぜか通っていたけど

437デフォルトの名無しさん2019/04/29(月) 11:47:53.29ID:atpu4K08
>>436
なんでそんな仕様になってるんだろう…

438デフォルトの名無しさん2019/04/29(月) 12:13:25.59ID:TWBg2sM/
>>437
2phase lookupだから
最初のTB解釈時にはTAが型引数一つのtemplate classであるという情報以外使わない
だいたいTAが特殊化される可能性があるだろ

439デフォルトの名無しさん2019/04/30(火) 10:16:07.47ID:5viqjSMx
8bitや16bitのintしか使えない環境で、
32bitなどの大きな数を扱うにはどうすれば良いですか?
変数をいくつかつなげて大きな数を表現できないかと思っているのですが、やり方が分りません。
ご存知の方いらっしゃいましたら教えて頂けると嬉しいです。

4404392019/04/30(火) 10:20:33.67ID:5viqjSMx
補足させて下さい。
足し算、引き算は出来るようにしたいです。
可能でしたら、掛け算や割り算もできると助かります。

441デフォルトの名無しさん2019/04/30(火) 10:25:07.05ID:l5C1eDEl
多倍長演算で検索

442デフォルトの名無しさん2019/04/30(火) 10:45:28.19ID:Cm5pFeJF
>>438
> だいたいTAが特殊化される可能性があるだろ
なるほどそりゃそうか、サンクス

443 ◆QZaw55cn4c 2019/04/30(火) 11:43:40.55ID:iYYZTFZo
>>439-440
http://2chb.net/r/tech/1434079972/51
近々、委譲をやめて継承に戻すつもりです
あと掛け算はkaratsubaを適用できる目処がたちました
x64 に特化してインラインアセンブラ化することも考えています

444はちみつ餃子 ◆8X2XSCHEME 2019/04/30(火) 12:03:49.54ID:MGpUBTsC
karatsuba はかなり桁数が多いときじゃないと効果がないとも聞くけど

445 ◆QZaw55cn4c 2019/04/30(火) 12:09:22.58ID:iYYZTFZo
>>444
多分それは乗算FFTのことかと

446デフォルトの名無しさん2019/04/30(火) 12:28:54.66ID:44LYo/LT
>>439
stdint.h で int_least32_t とか使えるのでは?

447 ◆QZaw55cn4c 2019/04/30(火) 13:43:58.68ID:iYYZTFZo
>>446
8bit/16bit CPU で int_least32_t とかはそもそも存在しないのでは?

448デフォルトの名無しさん2019/04/30(火) 14:19:40.82ID:44LYo/LT
>>447
「8bitや16bitのintしか使えない」を見て long や long long はもっと大きいんじゃないの?と思ったんだよ。
「整数型」の意味で"int"って書いてたんなら、確かに存在しない環境のことを言ってるのかもしれない。
その場合は ISO C/C++ の LONG_MAX の最低絶対値の要求に準拠できないってことになるんだけど。

449デフォルトの名無しさん2019/04/30(火) 14:19:47.17ID:gDkH0fQs
8bit pic用XCでもlongは32bitなのに

450 ◆QZaw55cn4c 2019/04/30(火) 15:03:05.44ID:iYYZTFZo
>>449
それはそれですごいインプリメンテーションですね…
8 bit PIC で 32bit int がさくさく書けちゃうとは、そのインプリメンターは根性がありますね、それか頭のねじが何本か外れていて「無理を無理と思わない人」とか…

451デフォルトの名無しさん2019/04/30(火) 15:29:16.24ID:0LsajAP1
shortは16bit固定でlongは32bit固定でしょ。何言ってんの?

452デフォルトの名無しさん2019/04/30(火) 16:18:35.89ID:coQMvXAj
>>451
いや、お前こそ何を言ってるんだ?

453 ◆QZaw55cn4c 2019/04/30(火) 16:37:10.66ID:iYYZTFZo
>>451
残念でした、short も long もインプリメンターが好きに実装していいのですっ!きりっ!

454さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/04/30(火) 16:45:08.36ID:lzNlO/OB
>>451
64-bit Linux でsizeof(long) が8だった。移植がある場合は<cstdint>使わんとあかん

455デフォルトの名無しさん2019/04/30(火) 17:46:03.06ID:bcA0O1+B
intが16bitならISOの規格は満たしてることになるかな。

32bit以上の長い整数はクラスと演算子オーバーロードで誤魔化すか。
頑張ってもリテラル表記もダメだろうから、使い勝手は悪いよな。

456デフォルトの名無しさん2019/04/30(火) 19:51:46.33ID:tnl21ewQ
>>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デフォルトの名無しさん2019/04/30(火) 20:17:37.41ID:YvhWBPAF
既にLP64とかLLP64とかの呼び方が存在するんだから、そっちを使おうよ
https://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

458デフォルトの名無しさん2019/04/30(火) 20:34:29.38ID:4LCMFhXh
厳密なbit長が必要なときにintだのlongだの使っちゃ駄目よ

459デフォルトの名無しさん2019/04/30(火) 20:56:09.36ID:ba2OmOyM
じゃあ何を使えばいいの?

460デフォルトの名無しさん2019/04/30(火) 20:59:46.66ID:jq/I62+g
int_leastシリーズでは?

461デフォルトの名無しさん2019/04/30(火) 21:02:03.72ID:tJFiug19
intの配列のラッパーのようなものから再発明すりゃーいい

class Bignumber{
int number[4];

Bignumber(const String num){
for(int i=0; i<4; i++){
number[i] = //考えるのが面倒臭い
}
}

Bignumber operator+(){
//以下、延々とオペレータオーバーロードが続く
}

};

462 ◆QZaw55cn4c 2019/04/30(火) 21:02:11.05ID:iYYZTFZo
>>459
int64_t とか int32_t とか cstdint の面々を使うしかないでしょうね…私もデフォでそうするようになりました

463デフォルトの名無しさん2019/04/30(火) 21:08:03.86ID:0LsajAP1
あ…ありのまま 今 起こった事を話すぜ。
平成の終わりにいろんな奴からshort/longに対する認識の誤りを指摘される恥辱を味わった。
何言ってるかわからねーと思うが(以下略

464デフォルトの名無しさん2019/04/30(火) 21:08:35.71ID:QYmLdpSV
なんかもうビットという表現すら無くそうとしてるんじゃなかった?

465デフォルトの名無しさん2019/04/30(火) 21:19:14.38ID:l5C1eDEl
制限された環境で使える多倍長整数のライブラリくらいいくらでもありそうだけど

466デフォルトの名無しさん2019/04/30(火) 21:42:28.23ID:ba2OmOyM
>>462
なるほど、cstdint ですか!
教えてくださりありがとうございます

467デフォルトの名無しさん2019/04/30(火) 23:24:19.16ID:xHYWEb3z
ビット数を付けるのは、MISRA-C で決まっているだろ

int8, 16, 32
uint8, 16, 32

468デフォルトの名無しさん2019/05/01(水) 00:05:54.61ID:rGIFhODV
C++の規格上はintは16 bit以上(ターゲットのアーキテクチャで一番自然なサイズ
、longは32 bit以上
だったと思った

469デフォルトの名無しさん2019/05/01(水) 06:23:13.87ID:EdGuPz7E
class ClassA
class ClassB: public ClassA
class ClassA::ClassC

のときに、ClassBはClassAのサブクラスと言いますがClassCはなんと呼ぶものですか?

470 ◆QZaw55cn4c 2019/05/01(水) 06:32:09.33ID:JcO9/TOD
>>469
>class ClassA::ClassC
この意味はなんですか?

471デフォルトの名無しさん2019/05/01(水) 06:32:44.82ID:TS5dpT59
基底クラス
スーパークラス
親クラス
ベースクラス

472デフォルトの名無しさん2019/05/01(水) 06:56:41.43ID:q4ZM9Khf
細かいことを言えば、規格準拠の処理系でも
int32_t (ピッタリ32bit) が定義されるとは限らないのね。
int_fast32_t, int_least32_t なら定義される。

8bit単位じゃないCPUへの配慮らしいから、
普通の(この表現も危険だけど)コンピュータを使う分には
int32_t があると仮定して書いてもたいがい大丈夫だろうけど。
コンパイルエラーが出るから出たら対処、で十分かと。

473デフォルトの名無しさん2019/05/01(水) 07:06:00.95ID:EdGuPz7E
>>470
クラス内で定義したクラスです

class ClassA {
public:
...
private:
class ClassC;
ClassC * C;
}

class ClassA::ClassC {
...
}
の場合class ClassA::ClassC からClassA::を取るとコンパイルが通りません

474デフォルトの名無しさん2019/05/01(水) 07:25:40.44ID:shCLaGGL
「プログラミング言語C++」だと、入れ子クラス(nested class)とか
メンバクラス(member class)とか呼んでるみたい。

475デフォルトの名無しさん2019/05/01(水) 07:36:13.31ID:EdGuPz7E
おお、なるほど
ありがとうございます

476デフォルトの名無しさん2019/05/01(水) 09:29:42.19ID:HwrGV3PF
内部クラス(inner class)もよく聞くけど調べたらJava用語っぽいな

477デフォルトの名無しさん2019/05/01(水) 10:28:09.06ID:imZnb7dZ
Inner Class、Java用語なのか。そう呼んじゃってたわ

478デフォルトの名無しさん2019/05/01(水) 17:22:15.78ID:Ul5/0sra
今よみがえる構造体ネストの悪夢

479はちみつ餃子 ◆8X2XSCHEME 2019/05/01(水) 17:31:05.65ID:Gk4iJJA0
>>473-474
nested class は仕様にあるので、
これが公式な用語と思って良いみたいだね。

480デフォルトの名無しさん2019/05/01(水) 19:23:34.42ID:DLNQH846
以前、「完全さを求めるあまり今存在する良い物を犠牲にしてはならない」という趣旨のことわざをBBCハードトークで仄聞したのだが、原典はなんだろうか?

481 ◆QZaw55cn4c 2019/05/01(水) 19:59:09.50ID:JcO9/TOD
>>480
ググってヒットしたもののうち、これについてめぐらせています(ことわざとは関係ありません…)
http://www.kt.rim.or.jp/~hisashim/gabriel/WIB.ja.html
この人(原著者)、最後まで間違ったままでいるような気がしてなりませんが、実際のところどうでしょうか

482デフォルトの名無しさん2019/05/01(水) 22:03:28.27ID:EdGuPz7E
>>479
ありがとう

483デフォルトの名無しさん2019/05/04(土) 17:19:13.49ID:x8LtSB02

484デフォルトの名無しさん2019/05/06(月) 08:44:53.70ID:Omhj+R8I
ストリームの遅さは凄い凄すぎる。
ほとんどの場合、遅くても問題ないということはわかる。
でもあそこ迄遅くする必要があったのだろうか。

485デフォルトの名無しさん2019/05/06(月) 10:41:12.07ID:ZJRraXBB
突然何?

486デフォルトの名無しさん2019/05/06(月) 12:17:09.96ID:jqdyfBGc
3.5  ストリーム
http://sicp.iijlab.net/fulltext/x350.html

これだろう
理想的にはこうなるべきだが、技術的には未だに追いついてないだけであり、将来的には解決される

なのでC++では他のどの言語も真似してない<<や>>がある
逆に言うとストリーム・プログラミングが主流になったらC++が主流の座に返り咲く

487デフォルトの名無しさん2019/05/06(月) 15:05:44.09ID:XjarcZ9f
今やどの言語もprintfのような書式付き文字列を指定する方式に回帰した(jsすら!)。
少なくとも書式付き出力に限れば、ストリームはプログラミング言語の中ではもう淘汰されてしまったんだと思うよ。
早いとこ、string::format()とかbasic_ostream::format()とか作ってほしいわ

488デフォルトの名無しさん2019/05/06(月) 15:24:11.52ID:ecbY6TsO
多言語対応するためにはC#みたいに %1, %2みたいに引数を番号で指定できる書式じゃないとダメでしょ。

489デフォルトの名無しさん2019/05/06(月) 15:30:05.12ID:HRNpJ9Fc
ストリームの精神はrangeに受け継がれて生き残るよ
だから書式はそろそろ負けを認めよう

490デフォルトの名無しさん2019/05/06(月) 16:03:09.57ID:ZJRraXBB
どうしてprintf使わないの?

491デフォルトの名無しさん2019/05/06(月) 16:28:48.00ID:YSlWnmwv
オーバーロードできないから

492デフォルトの名無しさん2019/05/06(月) 16:36:53.99ID:oGUqqIoM
<<には<<なりの良さがあると思うので、ストリームというより、stringがoperator <<をサポートすれば良いと思う。

493デフォルトの名無しさん2019/05/06(月) 16:40:04.95ID:DF3zK1Xx
文字列操作するためのインターフェイスとしては最悪だよ。
考えた奴は自分では絶対使わないで人に使わせるだけのタイプだろうな。

494デフォルトの名無しさん2019/05/06(月) 16:45:40.32ID:Yv9FD/Sb
そもそもだけど、なんで文字って表示されるのに
<< とか %s とかこういうのが必要なの?
どの言語でもprint(a);だけで表示させればよくない?aが文字列でも整数でも小数でもさ。
引数で判断してくれよ。

495デフォルトの名無しさん2019/05/06(月) 16:51:17.77ID:oGUqqIoM
>>493
え、そう?
文字列を連結する時に、+=と+を使い分けるより<<だけですむ方が楽だし、連結する順番も自明だし結構良くない?
std::string str;
str << "hoge" << 123 << ".txt";
みたいな。

496 ◆QZaw55cn4c 2019/05/06(月) 17:27:51.75ID:vu8V8zIe
>>492
それは私も考えていました、cerr に都度吐いているメッセージを、もう一度プログラムの最後にまとめて吐きなおす、とかをやってみたいんです…

497デフォルトの名無しさん2019/05/06(月) 17:37:23.51ID:QULX0INn
>>495
そのやり方は引数の順序を変えられないから語順が違う言語間での翻訳で困る

498デフォルトの名無しさん2019/05/06(月) 17:37:57.33ID:ecbY6TsO
コンストラクタの引数に出力先stringインスタンスを渡すostream派生クラスを作ればいいじゃない。
string str;
hogestream sstr(str);
sstr << "hoge" << 128;

499デフォルトの名無しさん2019/05/06(月) 17:42:30.68ID:B4KNKrTg
別にstringstreamで良いじゃない

500デフォルトの名無しさん2019/05/06(月) 17:42:46.83ID:B4KNKrTg
別にstringstreamで良いじゃない

501デフォルトの名無しさん2019/05/06(月) 18:13:11.14ID:L6nFhRY+
iostreamの<<はC++の黒歴史の一つだね

502はちみつ餃子 ◆8X2XSCHEME 2019/05/06(月) 18:19:09.50ID:K/rO19sE
stream の機能はいらんからとにかく文字列に差し込むだけ出来ればいいってのなら
単に operator<< を定義すれば出来るけど……。

https://wandbox.org/permlink/dIkEh0LDZEixGoiF

503デフォルトの名無しさん2019/05/06(月) 18:27:12.43ID:ecbY6TsO
>>499,500,501
ostream派生クラスじゃなくて独自のクラスのほうが軽量でいい。
stringインスタンスへのポインタのほかに、数値書き込み時の進数設定(oct,dec,hexを覚えておく)などをメンバ変数に持てばOK。

504デフォルトの名無しさん2019/05/06(月) 18:58:24.90ID:oGUqqIoM
>>502
をを、なるほど、これは素晴らしいw

505デフォルトの名無しさん2019/05/06(月) 21:02:54.05ID:ZJRraXBB
>>492
stringstream・・・

506デフォルトの名無しさん2019/05/07(火) 19:51:10.38ID:FbrTB0S1
basic_ostream使えよっていつも思う
なんで決め打ちするのかわからない

507デフォルトの名無しさん2019/05/08(水) 21:52:50.27ID:iQQm+nuQ
to_charsというものをみつけました。

508デフォルトの名無しさん2019/05/09(木) 18:03:02.17ID:PdPEbd3c
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デフォルトの名無しさん2019/05/09(木) 18:18:44.76ID:JXKWFyOS
そんな気色悪い書き方しなくてもこれでいいよ
a.insert(a.end(), std::begin(b), std::end(b));

510デフォルトの名無しさん2019/05/09(木) 18:25:51.81ID:PdPEbd3c
なるほど!ありがとう

511はちみつ餃子 ◆8X2XSCHEME 2019/05/09(木) 18:44:16.05ID:IVoLxnXn
>>508-509
std::copy に back_inserter を渡す方が効率的という豆知識。

512デフォルトの名無しさん2019/05/09(木) 18:53:31.44ID:vbHvKAwn
>>511
insertのが速いんでね?
resizeしてmemcpyになるはず

513デフォルトの名無しさん2019/05/09(木) 23:40:45.34ID:q7ofaYCv
アルゴリズムよりvector::insertのほうが実装による最適化の余地は大きそうだな

514デフォルトの名無しさん2019/05/10(金) 00:47:30.50ID:5C678nxv
ポインタがイテレータとして渡された時点で相手が連続バッファだってわかるからね

515デフォルトの名無しさん2019/05/10(金) 11:00:01.95ID:KAkBQh2y
&b[sizeof b]でもstd::end(b)でもやってることは変わらないんだけどな
見映えは重要だな

516デフォルトの名無しさん2019/05/10(金) 11:08:59.15ID:pPfi71KH
sizeof bじゃcharでしか使えないんで、そういう意味でもイケてないかも

517はちみつ餃子 ◆8X2XSCHEME 2019/05/10(金) 12:01:59.87ID:g2QrvVju
>>515
見栄えというか、名前が付いているってのはそれだけで単純にわかりやすいな。
(名前が妥当であれば。)

518デフォルトの名無しさん2019/05/10(金) 19:02:43.61ID:UhKi+qPE
嫌儲で、東京五輪チケットのソースコードが出てるけど
C++使ってるお前らなら、こんなソースコードじゃないよね?
C++相談室 part142 	->画像>13枚

519デフォルトの名無しさん2019/05/10(金) 19:05:10.83ID:curN/h5M
>>518
サーバーサイドあまりやってないけどこんな泥臭い書き方するのか

520デフォルトの名無しさん2019/05/10(金) 19:05:16.55ID:TAwz/zT/
javascriptやん

521デフォルトの名無しさん2019/05/10(金) 19:36:57.50ID:tfYAY6pz
こんなもんだろ
SIerが間違ってコンシューマ系のWeb制作を請けてしまうとこんな感じになる

522デフォルトの名無しさん2019/05/10(金) 21:47:05.61ID:oOPMkjEw
てかこんなもの韓国に出すのね
安くなさそう
ってもしや北の方?

523デフォルトの名無しさん2019/05/10(金) 21:53:19.07ID:oOPMkjEw
parseInt(Num).lengthって動かなそう

524デフォルトの名無しさん2019/05/10(金) 21:57:58.16ID:TAwz/zT/
ほんまやw桁でも返ってくるのかと思ったがundefinedじゃんかw

525デフォルトの名無しさん2019/05/10(金) 22:59:11.84ID:HK1/2Yro
型に無駄にこだわった結末がstreamと知っとくのは重要。
あの間違いを覚えとけ。

526デフォルトの名無しさん2019/05/10(金) 23:25:31.58ID:u3uVdMgu
ゲームのシーンを管理するクラスとシーンクラスがあり、管理するクラスはシーンクラスを保持しています
シーンクラスから管理クラスのシーンチェンジを行う関数を呼び出したいのですがどうやったらいいでしょうか
シーンクラスが管理クラスのインスタンスを持ちたくありません

527デフォルトの名無しさん2019/05/10(金) 23:30:31.35ID:0WVRNDv3
>>518
webにあげるなら難読化まではしないにしても最低限圧縮するよね

528デフォルトの名無しさん2019/05/10(金) 23:55:31.69ID:tshfuAdx
>>526
シーンクラスに管理クラスへの参照(ポインタ)を持たせればいいんじゃないのか

529デフォルトの名無しさん2019/05/11(土) 03:16:15.93ID:xsmcwCcm
早速情報漏洩やらかしたの?

530デフォルトの名無しさん2019/05/11(土) 10:30:07.92ID:f5HniSEP
>a.insert(a.begin(),&b[0],&b[sizeof b]);


これ、添字オーバーしてるけどメモリエラーとかにならないの?

531デフォルトの名無しさん2019/05/11(土) 10:54:36.87ID:RjxICFG6
>>530
イテレータ範囲のendは配列の場合最後の要素の次のアドレス
それは普通の実装ではアクセスされることはない
規格的にも最後の次の要素へのポインタだけは未定義じゃない

532デフォルトの名無しさん2019/05/11(土) 11:55:52.83ID:Y1ZlGg0p
>>530
アクセスしてるからダメそう

533デフォルトの名無しさん2019/05/11(土) 12:40:07.82ID:3XjGQ6E0
[]はただのアドレス計算じゃん

534デフォルトの名無しさん2019/05/11(土) 12:42:52.29ID:DVWj7ai3
&p[N]はp + Nと同じって規格にあったっけ?

535デフォルトの名無しさん2019/05/11(土) 12:44:31.45ID:RjxICFG6
確かに&b[sizeof b]はデリファレンスしてるわ
これはあかんそう

536デフォルトの名無しさん2019/05/11(土) 12:56:49.51ID:FaKAPAIh
>>533
a[i]は a+i ではなく *{a+i}

537デフォルトの名無しさん2019/05/11(土) 13:12:17.25ID:2v2BzL6t
経験上出来るプログラマーは言語オタクが多いイメージ?(ただし浅い)

538デフォルトの名無しさん2019/05/11(土) 18:44:16.82ID:fU686pnk
&*pはデリファレンスなしで単にpと評価するってどっかで特別に決められてなかったっけ?

539デフォルトの名無しさん2019/05/12(日) 06:58:46.18ID:x4ccFx6b
>>530
int a[5];
int *p = &a[5];
というコードが有効、つまり
「配列の最終要素の次の要素」(現実には存在しないデータ)のアドレスを取れる、
という仕様から、この場合は許される、というのが >>531 の指摘か。
一般的に >>538 が成り立つなら便利だけど、調べ切れなかった。

流れの元になった >>508 を見返したら、
a.insert(a.begin(),&b[0],&b[sizeof b]);
これだと b[] の内容はベクタ a の先頭に挿入されちゃうね。

540デフォルトの名無しさん2019/05/12(日) 07:43:52.68ID:2y1+p9UL
>>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デフォルトの名無しさん2019/05/12(日) 11:19:05.13ID:k8bUqGvO
>>539
>int *p = &a[5];
これは多分だめで、ポインタ値としての存在なら許される
int *p = a+5;

542デフォルトの名無しさん2019/05/12(日) 11:53:09.39ID:nuZIUjqi
ややこしいからoperator <<を定義しようw

543デフォルトの名無しさん2019/05/12(日) 15:25:00.10ID:8/5ODvoI
VC++だと
std::vector<T> a; &a[a.size()]はoperator[]のassertionに引っかかるね

544デフォルトの名無しさん2019/05/12(日) 22:25:11.86ID:yr8YjJOU
std::transformって並列処理されてますか?

545デフォルトの名無しさん2019/05/12(日) 23:20:05.82ID:jFoQmc6B
c++17のparallel版使えば並列実行されるかもしれない

546デフォルトの名無しさん2019/05/13(月) 01:24:36.27ID:RKe/NLvg
visual studioでC++17にしたけどいまいち並列版の使い方が分からなかった
普通にfor回すのと、OpenMP使ってfor並列化するのと、transform(非並列)使うの比較したら
OpenMP>普通にfor≧transform だった

547デフォルトの名無しさん2019/05/13(月) 20:49:38.54ID:YS57w6Jq
おとなしくpthead使えよ。

548デフォルトの名無しさん2019/05/13(月) 20:56:12.40ID:WUu3P+2G
非並列使ったならそりゃそうなるだろ

549デフォルトの名無しさん2019/05/16(木) 02:02:33.17ID:1v50lv4I
struct AとAを継承したstruct Bがあって
Aの内容をBの共通部分にコピーする方法ってないですか?
A a;
B b = a;
みたいにしたいんですけど親を派生先にキャストはできないので困ってます

550デフォルトの名無しさん2019/05/16(木) 02:06:57.91ID:mZDDPYlt
struct B : public A
{
B* operator=(const A& a){ this->hoge = a.hoge;}
};
これ初期時にも使えるんかな

551デフォルトの名無しさん2019/05/16(木) 02:25:05.62ID:1v50lv4I
コピーコンストラクタが実装できたとしてメンバ変数は1個ずつコピーするしかないですかね

552デフォルトの名無しさん2019/05/16(木) 02:28:08.55ID:mZDDPYlt
スライシングをさせるとか?
安全に?スライシング起こす方法ってあったっけな?
なんか危ういからやろうともしなかったが

553デフォルトの名無しさん2019/05/16(木) 06:25:17.13ID:/dAesd8e
cloneメソッド用意するとか

554デフォルトの名無しさん2019/05/16(木) 06:31:42.80ID:ebJ8HHSX
>>549
初期化時は普通にコンストラクタ初期化リストで A(a) って書けるでしょ。残りのメンバをどうするのか知らんけど。
代入なら static_cast<A&>(b) = a か b.A::operator=(a) で済みそう。

555デフォルトの名無しさん2019/05/16(木) 06:33:37.60ID:C3C4SHXA
普通にコンストラクタかオペレーター作ればいいんじゃね
B::B(const &A)
B::operator =(const &A)
A::operator B()
雑なキャストでよければdynamic_cast<A>でおk

556デフォルトの名無しさん2019/05/16(木) 06:38:27.18ID:C3C4SHXA
↑dynamic_cast<B>の間違い
B b = dynamic_cast<B>(a);

557デフォルトの名無しさん2019/05/16(木) 11:40:14.21ID:74mGoL8y
>>551
sturctでまとめればデフォルトコピーコンストラクタが使えるけどね。
あとはintとかPODオブジェクトだけだったらmemcpyしちゃうとかも、俺はたまにやるなw

558デフォルトの名無しさん2019/05/16(木) 17:20:00.24ID:PgzYowjZ
549です
解決しましたありがとうございます

以下のように書いたら思っていたことが出来ました
(派生先のコンストラクタで親のデフォルトコピーコンストラクタ呼べるの知りませんでした)
代入は現状使う予定がないので大丈夫です
B::B(const &A a) : A(a) {}

559デフォルトの名無しさん2019/05/16(木) 18:17:29.46ID:mr2QiBZl
その内容だったら=defaultでいいよ

560デフォルトの名無しさん2019/05/16(木) 21:32:58.41ID:/aEDSlbd
引数付きコンストラクタって、=default使えるの?

561デフォルトの名無しさん2019/05/16(木) 22:09:55.18ID:jJO9F8Je
使えないよね
うかうかっと読み過ごしてたわw

562デフォルトの名無しさん2019/05/18(土) 13:00:29.63ID:M54jyEoh
大本営がおるで!!!

563デフォルトの名無しさん2019/05/19(日) 21:52:57.08ID:sHpfouee
厳密にはC++の質問になるのかよく分からないんですが……
C++プライマーで勉強しててconstexprの部分にさしかかったんですけどコンパイル時評価、コンパイル時に評価される……みたいなことが書いてあるんですがこれの意味がいまいちよくわかりません
実行時評価という言葉も見られるんですがそれぞれの違いとそもそも評価ってどういう処理のことなんでしょうか
それとそもそもconstexprの使いみちが分かりません

よろしくおねがいします。

564デフォルトの名無しさん2019/05/19(日) 22:10:21.84ID:H7yZimvS
>>563
評価=機械語による演算。
コンパイル時評価とは、コンパイラ(PCなど)が演算してその結果を成果物に出力すること。
実行時評価とは実行機(スマホなど)でプログラム実行時に演算して利用すること。

565デフォルトの名無しさん2019/05/19(日) 22:21:54.17ID:Jw8g2++w
constexprってのは#defineの置き換えのために生まれたんだよ
C++11以前はenum使ってたんだけどなんかかっこわるいから専用のキーワードが出来たってことさ

566デフォルトの名無しさん2019/05/19(日) 22:26:05.40ID:yh9Mbv1R
1+2を計算するアプリ作るとするじゃん?
constexpr int a = 1 + 2;って書くじゃん?
でもこれaが3なの分かりきってるじゃん?
アプリをインストールした世界中のスマホでいちいち1+2=3って計算するの資源の無駄じゃん?
だからそういうコードを書いてコンパイルするとコンパイラが最初から「a=3」って埋め込んで世界資源の浪費を防ぐんだよ
これがコンパイル時評価

実行時評価は普通の電卓アプリがやってること
ユーザーが計算したいのは1+2か5×5かlog123456789かは使われてみるまでわからないので、おとなしくスマホのCPUと電池を使って計算する
これが実行時評価

567デフォルトの名無しさん2019/05/19(日) 22:27:31.23ID:c0f8nIXT
const int n = 5;
const int m = n * 100;

要するにこうするとmを計算してくれる

568デフォルトの名無しさん2019/05/19(日) 22:31:08.95ID:tquD1oX1
別にビルド構成に組み込めば済む話じゃね?くだらないな。

569デフォルトの名無しさん2019/05/19(日) 22:51:01.09ID:HuWon3wi
そんなことしなくてもソースコード中に普通のコードと一緒に書けるから

570デフォルトの名無しさん2019/05/19(日) 23:25:27.63ID:L0Ufwo4O
constexprはtemplateと組み合わせたときに真価を発揮する。
templateを実体化するときに、型や非型引数に加えて、変数や関数なども活用して複雑な条件をつけ、
実体化するコードをカスタマイズできるようになるからね。

571デフォルトの名無しさん2019/05/19(日) 23:34:14.21ID:+2TJ1Pbf
それなんかわかりやすい具体例コード出来ます?

572デフォルトの名無しさん2019/05/19(日) 23:36:46.24ID:oSFlthhy
constexpre定数って配列の要素数に出来るということ以外に本質的な意味ってあるの?
そのへんがよくわからない

573デフォルトの名無しさん2019/05/19(日) 23:37:52.41ID:yh9Mbv1R
「constexpr 中3女子」でぐぐると変態コードがたくさん出てくるよ

574デフォルトの名無しさん2019/05/19(日) 23:38:23.88ID:oSFlthhy
配列の要素数と非型テンプレートパラメータね

575デフォルトの名無しさん2019/05/19(日) 23:38:52.26ID:L0Ufwo4O
分かりやすいかどうかは知らないが、以前ここ?で誰かが紹介していたnameofライブラリとか?
https://qiita.com/ta_dragon/items/1828ceb16bc8733526e1
c++17で導入されたstring_viewを使った文字列操作で、enum定義を文字列化してしまうってやつ。

576デフォルトの名無しさん2019/05/19(日) 23:41:56.16ID:yh9Mbv1R
constexpr int f();

constexpr int a = f(); //OK
const int b = f(); //NG

違いってこれだけでしょ

577デフォルトの名無しさん2019/05/19(日) 23:42:38.19ID:yh9Mbv1R
あれ?違うわ
無視して

578デフォルトの名無しさん2019/05/19(日) 23:56:10.59ID:vshkspmO
変態じみたものとしてはコンパイル時cコンパイルがあるな。
http://kw-udon.hatenablog.com/entry/2016/12/03/201722

579デフォルトの名無しさん2019/05/20(月) 00:13:59.34ID:osDMULGu
constexpr以前でも定数伝搬とか意識して書いてたところはあったはず、でもそれが本当に定数になっているのかはアセンブリ見ないと分からない
constexpr導入によってconstexpr変数の初期化は確実にコンパイル時に実行される、できなければエラー
同様の理由でconstexpr関数(コンパイル時にも実行可能な関数)が導入される

580デフォルトの名無しさん2019/05/20(月) 00:26:47.75ID:TOLwHecl
アセンブリ見なくても生成コード見ればよくね

581デフォルトの名無しさん2019/05/20(月) 00:36:37.94ID:osDMULGu
コンパイラのAST見るって事?
より困難では

582デフォルトの名無しさん2019/05/20(月) 03:36:27.47ID:68OGLTNB
単なる#define定数の代わりとしても名前空間が使える分価値はあるし
例えばconstexprでCRCを計算すれば文字列switchが可能になるとか難しいけど便利ではある

583デフォルトの名無しさん2019/05/20(月) 08:10:49.52ID:lEqHTAQ5
それ普通にヘッダーファイル生成コードでも書いた方がいいだろ。。
そっちのが明らかに可読性、デバッグのしやすさ上だし。
こんなもんありがたがってるのはどうせmakeもまともに書けない連中だろう。

584デフォルトの名無しさん2019/05/20(月) 11:52:26.23ID:mpvIl0KS
そうやって何十万ものヘッダファイルを生み出した例を知ってる。

585デフォルトの名無しさん2019/05/20(月) 12:32:04.02ID:Eu4SldXI
>>583
c++の規格内で完結するのと、make等の外部ツールを使うのとでは移植性が全然違うよ。

586デフォルトの名無しさん2019/05/20(月) 12:47:56.71ID:DC309puZ
同じ記述でソースコード内に式が書け関数が使えるメリットは可読性に大きく影響するだろうに

587デフォルトの名無しさん2019/05/20(月) 16:29:52.79ID:MZiC0WHg
外部ツール使えばいいはさすがに草

588デフォルトの名無しさん2019/05/20(月) 18:36:37.69ID:a9u60dH4
configure なんて外部ツールを使ったソースファイルやヘッダーファイルを生成しまくりですが、新しい車輪の再発明ですか?

589デフォルトの名無しさん2019/05/20(月) 19:28:03.54ID:MZiC0WHg
configureできる純粋なWindowsはよ

590蟻人間 ◆T6xkBnTXz7B0 2019/05/20(月) 19:31:01.36ID:m/UtbRiI
configureは古い。GitHubやるならCMake一択。

591デフォルトの名無しさん2019/05/20(月) 19:35:30.06ID:ZjVO7Mes
CMake使ってるけど、いろいろ使いにくい。

592デフォルトの名無しさん2019/05/20(月) 19:47:55.36ID:MZiC0WHg
configureより100億倍マシだとは思うけど
それはそうとしてwindowsでpkgconfig使わせて

593デフォルトの名無しさん2019/05/20(月) 20:04:37.87ID:IyGiubcZ
CMakeって使いづらいよね
ターゲットの属性指定するのに
属性が先にくるんだもの

594デフォルトの名無しさん2019/05/20(月) 21:22:56.75ID:VWEIYE4F
Visual Studio(C#)のプログラミングに関する質問です。

インクルードする2ファイルが、双方のクラスを互いに必要とするケースにおいて、
コンパイルが通らなくて困っています。(当たり前なのですが…)

【Aファイル】
クラスAの定義{
クラスBの使用(インスタンス作成、メソッド利用)
}

【Bファイル】
クラスBの定義{
クラスAの使用(インスタンス作成、メソッド利用)
}

【全体インクルードファイル】
#include Aファイル
#include Bファイル

【コンパイル結果】
Bクラスが存在しません(Aファイルにて)

【質問】
お互いにクラス定義を必要とする場合、
★具体的に★どのような実装をすれば良いのでしょうか?

595デフォルトの名無しさん2019/05/20(月) 21:26:14.46ID:lEqHTAQ5
本当に複雑な計算が必要な定数なんてそんな多くないだろうに。。
やっぱバカしかいねーのな。。

596デフォルトの名無しさん2019/05/20(月) 21:28:50.53ID:TjPZT1E7
具体的には実装回答しないけど前方宣言

597デフォルトの名無しさん2019/05/20(月) 21:29:24.12ID:68OGLTNB
>>594
C#?

598デフォルトの名無しさん2019/05/20(月) 22:43:14.24ID:VWEIYE4F
>>596
前方宣言ありがとうございます。猛烈に調べてみます。

599デフォルトの名無しさん2019/05/20(月) 23:58:43.37ID:ZjVO7Mes
indexという構造体を作ってstd::vectorにぶち込んだらgcc8でエラーになるのだが。
ダメなん?

600デフォルトの名無しさん2019/05/21(火) 00:00:39.50ID:nvUZjTIz
ideoneでやってみると通るんだけどな。
そのままコピペしてもgcc8だと通らない。
なんやねんこれ。


lud20190718082117ca

レス:1-200 201-400 401-600 601-800 801-1000 ALL

このスレへの固定リンク: http://5chb.net/r/tech/1554124625/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「C++相談室 part142 ->画像>13枚 」を見た人も見ています:
C♯相談室 Part20
C++相談室 part126
C++相談室 part158
C++相談室 part124
C++相談室 part154
C++相談室 part150
C++相談室 part151
C++相談室 part155
C++相談室 part164
C++相談室 part156
C++相談室 part153
C++相談室 part157
C++相談室 part165
C++相談室 part149
C++相談室 part152
C++相談室 part148
C++相談室 part145
C++相談室 part134
C++相談室 part146
C++相談室 part140
C++相談室 part144
C++相談室 part133
C++相談室 part130
C++相談室 part138
C++相談室 part117
C++相談室 part141
C++相談室 part139
C++相談室 part137
C++相談室 part132
C++相談室 part143
C++相談室 part135
C++相談室 part137
C言語相談室(上級者専用)
C++相談室 part147
C++相談室 part162
C++相談室 part163
C++相談室 part166
C++相談室 part161
C++相談室 part159
Mac G5 中古買入相談室
MFC相談室 mfc22d.dll->動画>2本
C++相談室 part136
C++相談室 part131
C#, C♯, C#相談室 Part75
C#, C♯, C#相談室 Part79
河田さんによる人生相談教室
MFC相談室 mfc23d.dll
屯田五目須のお悩み相談室
C++Builder相談室 Part21
C#, C♯, C#相談室 Part90
C#, C♯, C#相談室 Part94
C#, C♯, C#相談室 Part91
自営業 悩みごと相談室 16
C#, C♯, C#相談室 Part93
C#, C♯, C#相談室 Part78
自営業 悩みごと相談室 40
C#, C♯, C#相談室 Part94
C#, C♯, C#相談室 Part92
自営業 悩みごと相談室 52
0からの、超初心者C++相談室
自営業 悩みごと相談室 47
自営業 悩みごと相談室 48
C#, C♯, C#相談室 Part97
C#, C♯, C#相談室 Part98
17:19:02 up 4 days, 17:32, 0 users, load average: 79.41, 89.08, 100.88

in 0.069812059402466 sec @[email protected] on 102206