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


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

【初心者歓迎】C/C++室 Ver.100【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 22:58:02.60 ID:dU5z27As.net]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

前スレ
【初心者歓迎】C/C++室 Ver.99【環境依存OK】
echo.2ch.net/test/read.cgi/tech/1469177649/

449 名前:デフォルトの名無しさん mailto:sage [2017/02/16(木) 04:13:34.86 ID:0dItl/ZH.net]
入門しなきゃならん奴が使うもんじゃない

450 名前:デフォルトの名無しさん mailto:sage [2017/02/16(木) 04:38:21.71 ID:6VkTpxSR.net]
https://cpplover.blogspot.jp/2009/11/lambda.html?m=1
ありました。
d.hatena.ne.jp/gintenlabo/touch/20130516/1368711542

ここ2つでまずは頑張ってみます。

451 名前:デフォルトの名無しさん mailto:sage [2017/02/16(木) 12:45:23.20 ID:SkhlZoRn.net]
よくわからんもの
ラムダ式、関数オブジェクト

452 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 04:01:51.58 ID:/gNkD5d3.net]
#include <iostream>
using namespace std;
int main() {
unsigned char aa=0x31;
cout << hex<<aa <<endl;
return 0;
}
なんで 31 と表示されないのでしょう

453 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 05:25:27.96 ID:Z2r3IJRX.net]
たぶん 1 が表示されるでしょ。
aa が char だから出力ストリームでは文字が出る。
数値を出したければ aa を int で定義するか、
cout のところで int にキャストしてやらないと。

454 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 07:07:08.11 ID:39ud/5Wb.net]
>aa が char だから出力ストリームでは文字が出る

因果関係がよくからないのですがcharだとなぜ文字がでるの?

455 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 07:22:25.14 ID:fOTzzkTG.net]
>>446
渡した値の型によって、それをどう表示するかが異なるように作られているから。
printfという関数で出力する場合は、出力したい値のほかにそれをどういう形式で出力するかという情報を別に与えていたけど、iostreamでは、型で自動的に処理してくれる。

456 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 07:52:16.70 ID:+UDZhFA4.net]
uint8_tとか使ってるとき嵌るんだよなぁ。

457 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 07:53:27.01 ID:Z2r3IJRX.net]
「C++では引数の型や個数が異なる同じ名前の関数をいくつも定義できて
引数の型や個数に応じた別々の動作にできる」
「関数引数の変数値が(Cとは異なり)自動的にはintに格上げされない」
くらいしか説明の文面を思いつかないけど、我ながら分かりにくいな。

coutに対する<<演算子(を実行する関数)が、
charの引数に対して



458 名前:ヘ文字を、intの引数に対しては数値を
出力するよう上手いこと作られている。
ってのは「昔からそう決まっとる」式の押し付けがましい感じだし。
[]
[ここ壊れてます]

459 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 15:18:41.50 ID:/gNkD5d3.net]
>>445
ども 書いた後、すぐintでやったらわかった。
"<<" 系の入出力演算子とビットシフトの問題も同じ理由か。

460 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 17:04:51.60 ID:xoJSqgdl.net]
VC++の質問です。
フォームのコントロール(ボタンなど)をアンマネージクラスに保持する方法が知りたいです。

// コンストラクタの引数より、ラベルのコントロールをprivateに保存し、setLabelTextでラベルのテキストを変更するクラス
class LineController
{
private:
  System::Windows::Forms::Label^* label_;
public:
  LineControllerSystem::Windows::Forms::Label^% label);
  void setLabelText(System::String^ str); // label_のTextに引数strを設定。
};


最初に表示されるフォームのコンストラクタにて上記のクラスをnewし、そのクラスインスタンスをアンマネージクラスのシングルトンに保存しています。
シングルトンに保存直後に、シングルトン経由でsetLabelTextメソッドを実行した場合は正常label_のTextを変更可能でした。
しかしボタンクリックイベント内にて、同様にシングルトン経由でsetLabelTextをコールするとlabel_へアクセスしたタイミングで「オブジェクト参照がオブジェクト インスタンスに設定されていません。」が発生してしまいます。

本エラーを回避するにはどのような手法をとればよいでしょうか?
追跡参照(%)などを調べているのですが現状解決の糸口が見えません。
シングルトン及び上記LineController自体はできればマネージにしたくないです。。。

461 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 11:23:25.68 ID:2DCCXMeS.net]
C++の話題そのものではないのですが
バブルソートとか初歩的なアルゴリズム
を優しく解説している書籍はありませんか。

Amazon見てるのですがもう少し情報がほしいです。

462 名前:デフォルトの名無しさん mailto:sage [2017/02/20(月) 01:05:36.35 ID:aWzwD2VT.net]
>>452
ピタゴラスイッチでバブルソートやクイックソートの概念をグラフィカルに紹介してたよ。
それはさておき、本屋の店頭でアルゴリズムとかデータ構造とかがタイトルに含まれる本をパラパラめくって分かり易いのを探すといいかと思う。

463 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 00:15:43.57 ID:OFTvUoLj.net]
とあるOSSをとあるシステムに移植していて、
Intel(2013)やGNU(4.9系)ではコンパイルできるのに
そのシステム専用コンパイラではコンパイルできずエラーになります。
ソースコードやヘッダファイルを修正すれば通るだろうというのは経験的にわかっているのですが
どこを修正したらよいかというのを見つけ方がわからないのですが見つけ方のコツみたいなのはあるのでしょうか?

464 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 00:32:08.81 ID:fcoMqi2n.net]
エラーメッセージの意味を考えろ

465 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 01:18:37.30 ID:9fQxfYbZ.net]
>>454
エラーメッセージを見ないことには回答のしようがないと思うぞ

まぁ、専用のコンパイラという言い回しから察するに、C++03程度しかサポートしていない古いコンパイラでも使ってるんじゃないか?
エラーが出ている行の周辺でC++11以降の言語機能か、ライブラリでも使ってんじゃね?

466 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 01:18:57.64 ID:bFUDo/lz.net]
>>454
ともかく、
そのシステム専用コンパイラ提供しているところに、世界標準のIntel(2013)やGNU(4.9系)ではコンパイル
出来るのにお前のものではできないから出来るようにしたコンパイラをよこせと激しくクレーム

467 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 01:32:37.44 ID:bFUDo/lz.net]
>>456
C++11いっぱいのコードをC++03に修正するって大変そうだな



468 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 06:31:57.51 ID:OFTvUoLj.net]
>>456
>>457
メッセージは
「オーバーロードされた関数"HOGE"のインスタンスが引数リストと一致しません。」
みたいな感じです
一応C++11準拠でGNU4.9一部互換とされてるコンパイラですが。。。

469 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 08:12:09.46 ID:9fQxfYbZ.net]
>>459
HOGEが想定している引数型と実際に渡している引数の型を確認
違うやつが犯人

これ以上は情報少なすぎてわからん

470 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 15:33:32.84 ID:rWOcc73c.net]
一般論としてどういうことに注意したらいいですかって質問じゃなくて、具体的に解決してもらいたいってことなのかよw

471 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 22:19:07.17 ID:OFTvUoLj.net]
>>460
intelコンパイラで作ったオブジェクトをnmコマンドで中見て
こうあるべきという形がわかったんであとは頑張ってみる

472 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 22:24:52.45 ID:qEEiXXQS.net]
HOGEの中にHAGEが紛れ込んでるんだな

473 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 07:28:41.35 ID:F7TE97aZ.net]
>>453
有難うございます。
田舎ですので大きな書店には距離があります
が、行ってみます。

474 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 11:11:49.24 ID:T1tKwjPz.net]
>>459
テンプレートが悪さしてるか const の取りこぼしかデフォルト引数のミスが起きているとエスパー

475 名前:デフォルトの名無しさん mailto:sega [2017/02/22(水) 19:03:10.40 ID:7bpb3LbA.net]
printf("%s",buf);

fputs(buf,stdout);

どっちが好き?

476 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 19:20:15.64 ID:JmFr9wbV.net]
違う処理のコードを並べてどっちと言われても

477 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 19:49:35.49 ID:OuXxGo6B.net]
>>467みたいな人が居るのでprintfかな



478 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 20:00:39.94 ID:G8P7P0/x.net]
どっちも最後に使ったの20年ほど前かな

479 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 21:09:01.14 ID:T1tKwjPz.net]
puts とか使ったことないわ

480 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 21:30:22.88 ID:Z0Pf8P/J.net]
>>469
ログ出力・エラー出力がメインでstdoutはあんまり使わないよな

481 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 21:36:43.56 ID:3nEefUGO.net]
putsは改行してくれるんで好きだな。fputsも。

482 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/02/22(水) 21:39:49.82 ID:mKcPOHkg.net]
>>472
fputsは改行を追加しない

483 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 21:51:09.45 ID:3nEefUGO.net]
>>473
あ そうだった。 すまん

484 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 00:12:45.93 ID:oHheANLP.net]
細かいのを大量に出したいときはprintfは遅い

485 名前:デフォルトの名無しさん [2017/02/23(木) 18:17:55.29 ID:2nyak89s.net]
class CL{
CL(int _d, string _s) : d(_d), s(_s)
{

}
public:
int d;
string s;

};
int _tmain(int argc, _TCHAR* argv[])
{
CL *cl = new CL(555, "a");←ここでエラー。なんで?

486 名前:デフォルトの名無しさん [2017/02/23(木) 18:23:14.57 ID:sZtROie8.net]
>>476
こんすとらくたがprivateだから

487 名前:デフォルトの名無しさん [2017/02/23(木) 18:23:56.57 ID:2nyak89s.net]
そういうことかあ
あざす



488 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 21:15:37.70 ID:JF3nU8GT.net]
生成出来ないクラスってやつね。

489 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 21:50:10.15 ID:33+Wu0JT.net]
>>479
friend なクラスからしか生成しないようにするとかはあるね

490 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 21:52:15.77 ID:JF3nU8GT.net]
はい そゆ事。

491 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 21:53:15.53 ID:0FbQfq3V.net]
staticメソッドで生成するって形の時に使うことが多い
singletonとか

492 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 22:20:39.38 ID:v0zRNZ3l.net]
ctorはpri.でメンバーはpub.って
どういうことなんだ?

493 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 22:26:42.14 ID:I6Uc1mEc.net]
一つ前のレスも読めない文盲

494 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 22:44:21.27 ID:SD8t1ALL.net]
質問
C/C++でランタイムで現在のメモリの状態
とくにプロセスが使える余っているメモリの量って調べ方はありますか?

495 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 08:45:12.70 ID:SswDvM4l.net]
環境すら書かないと言うことは
(実質)環境非依存での方法を聞いてるんだろうな?

496 名前:デフォルトの名無しさん [2017/02/24(金) 08:54:02.15 ID:See/JzpM.net]
そんなもん無いけどな

497 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 09:53:13.79 ID:0sr6h+Re.net]
失敗するまでmallocやnewを繰り返せばええんや



498 名前:デフォルトの名無しさん [2017/02/24(金) 10:43:32.63 ID:See/JzpM.net]
>>488
Linuxじゃ失敗しないよ

499 名前:デフォルトの名無しさん [2017/02/24(金) 10:53:37.11 ID:See/JzpM.net]
もたろん割り当てるアドレス空間自体が足りなくなったとか、予め上限を設定しておいたとかいうケースは覗いてな

500 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 11:09:14.16 ID:9xRtAprE.net]
16byteのメモリを積んだコンピュータで32byteのメモリ確保したら失敗するよね。

それはわかる。

逆に16byteのメモリを積んだコンピュータで7byteのメモリを二回確保して最初の7byteを開放した後に8byteのメモリを確保したら失敗するの?

501 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 11:41:21.86 ID:KhjrQy0g.net]
基本的にでっかくメモリ確保というプログラムは作った事がないな。
今はSTLでほげほげ追加してくイメージ。

502 名前:デフォルトの名無しさん [2017/02/24(金) 11:47:17.85 ID:See/JzpM.net]
>>491
>16byteのメモリを積んだコンピュータで32byteのメモリ確保したら失敗するよね。
そうとは限らない。一般的なLnuxの環境依存ではmallocを搭載メモリ以上行っても失敗しない
swap含めて1GBしか積んでいない環境で2GB分malloc可能。確保した領域に書き込んだタイミングで記憶する領域が足りなくなったら色々なプロセスが殺される。oom killerと言われてるもの。
>
逆に16byteのメモリを積んだコンピュータで7byteのメモリを二回確保して最初の7byteを開放した後に8byteのメモリを確保したら失敗するの?
実装による。現代的なコンピューターではページ単位(4KB)とかでカーネルからプロセスへすきなアドレスへメモリを割り当てられるから物理的なアドレスが連続している必要はない。
プロセス内に連続したアドレス空間が残っていない場合は失敗する

503 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 11:52:16.13 ID:NAh96dM2.net]
仮想メモリというしくみで色々やってくれるようになって
キャパの限界付近ではややこしくなった印象

504 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 12:48:55.46 ID:KhjrQy0g.net]
家鯖は6G積んでるけどそれぐらいは行けるね。
てかkvmやってると、9Gコミットされてるもん。

505 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 15:10:06.50 ID:CcmE3pWB.net]
>>488
それスワップエリアのサイズ計ってるだけ

506 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 15:25:25.94 ID:nwaeFCKh.net]
winならGetProcessMemoryInfoなど

507 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 17:26:32.84 ID:9xRtAprE.net]
>>493
> 物理的なアドレスが連続している必要はない
なるほど、長年の疑問が解消した。
493の読解力に感謝。



508 名前:デフォルトの名無しさん [2017/02/24(金) 18:02:34.91 ID:See/JzpM.net]
>>498
望む答えだったみたいで良かったわ
熱があって若干朦朧とした頭で読み返さずに書き込んだから今読み返すと誤字とか予測変換で要らない単語入ってたり(一般的なLinux環境)とか、カッコの位置が違う(4KBとかの部分)とかあったけど。

509 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 18:52:48.08 ID:dfRROZm/.net]
環境依存ならPostMessageのエラーコードかな
俺はあんま理解してないけど

510 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 19:06:57.61 ID:+aOqx8nq.net]
Win32なら信頼のPostMessageだな

511 名前: ◆QZaw55cn4c mailto:sage [2017/02/24(金) 22:16:12.34 ID:4ewDjGBZ.net]
またその話題ですか‥

512 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 23:03:49.77 ID:TLhS+9k8.net]
はよ10年前のソース出せよ

513 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 23:06:00.45 ID:nwaeFCKh.net]
i.imgur.com/OwlfgGw.jpg

514 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 07:21:27.70 ID:98TUEskp.net]
なんで2分ちょいで出てくるかね。

515 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 08:14:13.74 ID:QoR/O5Qa.net]
自演

516 名前:504 mailto:sage [2017/02/25(土) 08:21:08.89 ID:Jm21gNIW.net]
>>503>>504 だ。すまんなw

517 名前:デフォルトの名無しさん mailto:sage [2017/02/26(日) 18:42:59.30 ID:stmjd5mD.net]
味噌県のクセにコーミソース以外のソースを使う非国民は去れ



518 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 07:57:48.79 ID:NqblWJNK.net]
#define ChannelBlend_SoftLight(A,B) ((uint8)((B < 128)?(2*((A>>1)+64))*((float)B/255):(255-(2*(255-((A>>1)+64))*(float)(255-B)/255))))
このマクロの
(2*((A>>1)+64))
この部分なんですが
なんで(A+128)じゃないんですかね?

519 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 08:21:33.22 ID:1XvIZqGa.net]
最初の人がコピペで作ったんでしょ。+128に定義し直してるのもあるよ

520 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 08:30:32.82 ID:cJfBjMIV.net]
Aが奇数のときの動作が違うね

521 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 10:33:08.69 ID:NqblWJNK.net]
A、Bにはuint8を想定してますから、一瞬オーバーフローの関係かなとも思いましたが
そんなことはなく、特に深い意味はなさそうですね
ありがとうございます

522 名前:デフォルトの名無しさん mailto:sage [2017/03/13(月) 00:19:03.26 ID:ZWBqluXH.net]
仮想関数をオーバーライドするときはどう書くのがいい作法?
void vf()
virtual void vf()
virtual void vf() override
void vf() override

523 名前:デフォルトの名無しさん mailto:sage [2017/03/13(月) 06:06:33.92 ID:IkDDkkqX.net]
ハゲ先生によると最後の void vf() override が良いみたい。
『プログラミング言語C++ 第4版』p.592

加えてoverride指定の不整合をチェックするコンパイラオプションだね。
GCCのVersion 5から使える -Wsuggest-override とか。
他のコンパイラについては知らん。

524 名前:デフォルトの名無しさん mailto:sage [2017/03/13(月) 10:43:38.74 ID:Kr7xjXLG.net]
デストラクターに付けてる人はあんま見たこと無いな
class Derived : Base {
public:
 ~Derived() override {}
};

525 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/13(月) 20:30:08.38 ID:VNPYsRzK.net]
Bcc55でtypeofを実現するのは不可能なのかな?

526 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/13(月) 20:57:04.03 ID:VNPYsRzK.net]
古いコンパイラを使ってる人居る?
コンパイラの名前教えて下さい。

527 名前:デフォルトの名無しさん mailto:sage [2017/03/14(火) 23:30:09.48 ID:wzywZVIy.net]
老人がカセットテープデッキ求めたり
熟女モノのエロ本()を求めるような感じ?



528 名前:デフォルトの名無しさん mailto:sage [2017/03/15(水) 01:04:07.22 ID:R2Ueow1p.net]
古いコンパイラと自覚しつつも使ってるような人はこのスレには来ないだろ
時代遅れの遺物の話じゃ通じないし

529 名前:デフォルトの名無しさん mailto:sage [2017/03/17(金) 11:46:00.03 ID:pwo5j4El.net]
何でA、Bを()しないんだ?

530 名前:デフォルトの名無しさん mailto:sage [2017/03/25(土) 21:37:15.77 ID:IRaGixDk.net]
いまだに関数マクロ使ってるようでは
()したところで五十歩百歩

531 名前:デフォルトの名無しさん mailto:sage [2017/03/25(土) 22:37:56.47 ID:9zWIhzFx.net]
>>460
>>465
宣言とかいろいろ確認してやっぱソースはおかしくないよねってことで
サポートに調べてもらったら理由はわからないけど正しく動作する修正方法がわかったって連絡があって
最終的には詳細は書けないけどコンパイラのバグだった

532 名前:デフォルトの名無しさん mailto:sage [2017/03/26(日) 08:58:38.45 ID:4rESVRzB.net]
ここはお前の日記を垂れる場所じゃない
「サポートによるとコンパイラのバグだった」で済むのに
アレやってコレやってを書くな低能

533 名前:デフォルトの名無しさん mailto:sage [2017/03/27(月) 10:03:34.57 ID:wSWIgauQ.net]
事後報告あると参考になっていいんだけどな
今回は本人以外に状況がわからないから事後報告されてもw

534 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 03:06:01.35 ID:6sTQLdA2.net]
codepad.org/KMQH3TsZ

ポインタをメンバに持たせた場合のget/setの書き方が分かりません
getの方は、ポインタを返すときに返した先で値を変えられないようにconstを付けたのですが、
sizePlus10のような関数を呼びたい場合に、const_castを付けて呼ぶことになってしまいました
値の変更をするのでsetを通してやるのが良いと思うのですが、何か良い書き方ありますか?

また、setの方は、一括で設定させることはできるのですが、
data->id、data->sizeの値を個別に設定したい場合、何か良い書き方はありますか?
コメントの部分のようにsetメンバ関数を何個も書く方法しか思いつきません

535 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 07:50:43.79 ID:GtG5BmiK.net]
getDataの結果を修正したいのだから
杓子定規にgetDataの戻りにconst付けるのを止めればいいのではないか

そう言えばC++17(ドラフト)もstring::dataの戻りが非constに修正されたような

536 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 08:08:59.00 ID:KJlpKUaR.net]
memcpy w

537 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 10:48:22.67 ID:JHpE2Dpf.net]
>>525
一般論として形でただ覚えるのではなくて意味を理解しよう
理解があやしいから設計の一貫性がなく混乱してるようにみえる
・Dataをポインタで所有するのはなぜ
・ゲッター/セッターを使ってアクセスするのはなぜ
・ゲッターで返す値にconstをつけるのはなぜ
・sizePlus10がData*を受けとるのはなぜ

MyClassの設計方針にあわせるならsizePlus10をDataではなくMyClassを受けとるようにして
void sizePlus10(MyClass & mc)
{
Data newdata = { mc.getData()->id, mc.getData()->size + 10 };
mc.setData(newdata);
}
あるいは別の関数を作って
void MyClassSizePlus10(MyClass & mc)
{
Data newdata = *mc.getData();
sizePLus10(&newdata);
mc.setData(newdata);
}

これが変だとか非効率だとか思うなら
MyClassの設計が要求にあってないのでそっちを変更する



538 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 20:11:34.52 ID:irpIFLVN.net]
>>528
おまえは質問の意図を理解しよう

>>525
そのsetgetでいいんじゃない?ただそのgetは俺だったらreferにするな
ついでにsetget両方使えるようにdata* operator->()みたいなの実装かな。というかむしろそっちでアクセスする方向にするな
あとはattachdetach作っておいてm_dataを置換できるにようにしちゃうな
その手のスマートポインタは至るとこで使われてるからこんなとこで聞かずにどっかのライブラリの参考にしたら?

メンバのコピーはpragma pack1でstructしておいてmemcpy

539 名前:デフォルトの名無しさん mailto:sage [2017/03/30(木) 23:27:09.74 ID:O3+3nsIM.net]
>>529
>メンバのコピーはpragma pack1でstructしておいてmemcpy

それをすると何がいいことあるのか?

540 名前:デフォルトの名無しさん [2017/03/30(木) 23:45:25.72 ID:s+CP+YQd.net]
こういえクソみたいな方法を自慢気に語り出す奴が居るところかC++の最もクソな所だよね

541 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/30(木) 23:51:55.55 ID:2hi+y029.net]
デフォルトコピーコンストラクターとか構造体代入とか知らないんだろう。

542 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 00:14:17.76 ID:5j4NF4+Z.net]
>>532
>構造体代入とか知らないんだろう
ほうほう、それは何ですか?

543 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 01:59:49.12 ID:OFYzpq31.net]
やべえなおい糞コードの臭いがプンプンしやがるぜ

544 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 02:09:29.70 ID:DQgqVTGo.net]
>>526-529
ありがとうございます

今まではとりあえずget/setを書いてgetにはconstを付けとけば良いみたいな認識でしたが、
想定されるクラスの使われ方に合わせて適宜変更するべきでした

MyClassのようなget/setの分け方をすると、
sizePlus10のような関数やsetで不便になってしまうので、
constを付けないget/set共用のものにしてそれを通してアクセスさせるのが適切でした
( getData()でアクセスする場合、Data * const getData() const { /**/ } みたいな )
とても参考になりました

545 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 11:52:48.85 ID:xItn/dk+.net]
>>531
くそじゃない方法をおしえて

546 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 12:09:56.69 ID:c13jjk6+.net]
C#じゃないからないでしょ

547 名前:デフォルトの名無しさん [2017/03/31(金) 13:26:56.75 ID:CbPadW0u.net]
>>536
コピーは=使え
というだけの話



548 名前:デフォルトの名無しさん mailto:sage [2017/03/31(金) 13:38:11.94 ID:2wgHKgmk.net]
>>529
> メンバのコピーはpragma pack1でstructしておいてmemcpy
これ俺も理由知りたい

549 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2017/03/31(金) 17:24:06.64 ID:tvggMnLQ.net]
typedef struct MY_STRUCT
{
int ch;
} MY_STRUCT;

MY_STRUCT a,b;
a.ch = 0;
b = a; //代入できる






[ 続きを読む ] / [ 携帯版 ]

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

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