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


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

C++相談室 part132



1 名前:デフォルトの名無しさん mailto:sage [2017/10/10(火) 00:11:34.01 ID:nc/5PI4P0.net]
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part131
mevius.2ch.net/test/read.cgi/tech/1501295308/

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

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

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

357 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 00:39:07.86 ID:Xm/a3Zyv0.net]
共用体は、パリティチェックで使う

あるサイズの内容を、ある方法で計算して、データが破壊・改変されていないか。
通信データが正しいかどうか

358 名前:デフォルトの名無しさん mailto:sage釣 [2017/11/03(金) 01:31:20.38 ID:f3hy7vD8M.net]
>>349
確保済みのメモリブロックに対してのobject new 演算子ってのが
あるはず

359 名前:デフォルトの名無しさん [2017/11/03(金) 07:14:49.06 ID:3SB+84d60.net]
境界調整はalignasでできるようになった

360 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 18:27:07.09 ID:6x/Gce9W0.net]
string::format()マダァー?
<<は失敗だったって早く認めようぜ

361 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 21:32:49.68 ID:A4m/loi/0.net]
printf()系関数とstring::c_str()(ていうかbasic_string<T>::c_str())があるから無問題

362 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 21:34:26.06 ID:A4m/loi/0.net]
入力はscanf()系とか使うとCの経験が長いプログラマーには軽蔑の眼差しで見られるが
cinとかより速くて使い勝手も良いのだから仕方が無い

363 名前:デフォルトの名無しさん mailto:sage [2017/11/03(金) 21:46:14.60 ID:+rn5t+yk0.net]
boost::format よく使ってる

364 名前:デフォルトの名無しさん [2017/11/03(金) 23:08:11.68 ID:veVAWEWL0.net]
可変テンプレート使えるんならprintfにクラス喰わせたりすることぐらいできるだろ

365 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 00:02:18.18 ID:9Iye7uTf0.net]
snprintfじゃstringstreamの代わりとしては役者不足だろ



366 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 07:27:21.97 ID:CbR/PKzh0.net]
「役者不足」は造語なんで使わないほうが無難

367 名前:デフォルトの名無しさん [2017/11/04(土) 09:25:02.17 ID:v7stxdd6M.net]
>>362
しかも「役不足」じゃあ、「役より実力が遥かに高い」の意味だしね。

368 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 12:54:53.20 ID:z55RyEJo0.net]
「力不足」な

369 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 14:09:16.93 ID:CaxSQdEs0.net]
>>361
全然wwwwwwwwwww
自作クラスのシリアライズ/デシリアライズの下請け関数として使う分には
機能上全く困らない上に速いのだから

で、シリアライズ/デシリアライズおあ
void ISeriarizable::seriarize(FILE* fp)とvoid ISeriarizable::deseriarize(FILE* fp)
にして「<<」や「>>」のオーバーロードみたいな変態じみたことはせずに同等の柔軟性を確保できる
  

370 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 14:29:00.75 ID:+71Y93dj0.net]
設計が古いな。

371 名前:デフォルトの名無しさん [2017/11/04(土) 15:30:32.32 ID:2OIo1NJb0.net]
cin,cout って組み込みで使えるんかい?
何処をどう書き換えるとそうなるん?

372 名前:デフォルトの名無しさん [2017/11/04(土) 15:34:07.08 ID:2OIo1NJb0.net]
string s1("foo");
const char *p = NULL;
p = s1.c_str();
cout << p << endl;
return 0;
????
cout << s1<<endl; じゃダメなん?

373 名前:デフォルトの名無しさん [2017/11/04(土) 22:22:05.63 ID:2OIo1NJb0.net]
Coutを実験してみたがコードがバカでかくなるので駄目だな。組み込みでは使えない。

374 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 22:34:50.04 ID:WXoZTt/lM.net]
>>369
組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ

375 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 22:37:40.26 ID:z55RyEJo0.net]
組み込みに使うなら実験とかじゃなくちゃんとどんなコードか把握しろよw怖いわ



376 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 22:57:54.30 ID:GShvEvWZ0.net]
そもそも組み込みの標準入出力がどんなもんなのかすら想像できないw

377 名前:デフォルトの名無しさん mailto:sage [2017/11/04(土) 23:37:09.27 ID:wPtyVAZ40.net]
組み込みでは使えないなんていう次元ならそもそも標準ライブラリ使わないだろ

378 名前:デフォルトの名無しさん [2017/11/05(日) 00:56:53.05 ID:1GSqUY/t0.net]
デバッグ担当「なぁ?なんかログにアホとかハゲとかあるんだけどナニコレ?オレの事おちょくってんじゃねーだろうなぁ?!あ!!!!」

379 名前:デフォルトの名無しさん [2017/11/05(日) 05:24:49.90 ID:qHZ+DCMx0.net]
streamの変更ムズいんだけど。
入力だとstreambufのunderflow実装すると思うけど、エラー発生したときどうやってistreamに通知すんの?

380 名前:デフォルトの名無しさん [2017/11/05(日) 06:18:13.15 ID:vRj0Z3ir0.net]
struct lock_interrupt {
 lock_interrupt() : masked(get_imask_ccr()) { 
set_imask_ccr(1); 
 }
 〜lock_interrupt() { 
set_imask_ccr(masked); 
 }
 bool masked;
};

 // in some function... 
 lock_interrupt lk; 
 // do critical action, lets forget unmask interrupt flag!
} 


このコード lock_interrupt() : masked(get_imask_ccr()) { 
ここの部分の”:”ってどういう意味なの?
何となくコンストラクタとディストラクタがせっとになってるだろうなー
だから”}”に出会うと自動的にディストラクトされるコードだろうか?
ってくらいしかわからないレベルだから、、、、是非ともこのコードを
使い倒してみたい。

381 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 06:23:01.44 ID:U5vPVsbz0.net]
メンバイニシャライザでググれ
てか初等文法くらい勉強しろよ

382 名前:デフォルトの名無しさん [2017/11/05(日) 06:27:09.42 ID:vRj0Z3ir0.net]
>組み込みで何をやりたいのか知らんけど普通coutを書き換えるだろ

ん?
普通はcoutを使わないという意味だろうか? それなら同意する。
#include <iostream>
を追加しただけで256kbyteを超えてしまう。これではマイコンじゃ使えないな。
もちろんcoutが使えないって意味だよ。使えないなら書き換える? まあそれは
むりだな。なぜなら書き換える場合でもiostramをインクルードするひつようがあるからね。

つまり書き換えなんてできない。つまり使えないし使わない。すなわち結論としては
Cのsprintfを使うってのが順当かと思う。

383 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 06:30:56.15 ID:U5vPVsbz0.net]
>>376
あとついでにクラス全体を説明すると、コンストラクタで割り込みをマスクして
デストラクタで元に戻している。
こんな感じで使う

void foo () {
lock_intterupt lock; // 以下割り込み禁止
if (...) {
....
return;
}
.....
return;
}
割り込み禁止を解除するコードを書き忘れたり複数書いたりせずに済む。

384 名前:デフォルトの名無しさん [2017/11/05(日) 06:35:39.18 ID:vRj0Z3ir0.net]
>メンバイニシャライザでググれ
キーワードありがとう。
ググってみた。メンバーイニシャライザってことはわかったんだがなんか特殊だな
masked = get_imask_ccr();
こういうことか? なるほど。

385 名前:デフォルトの名無しさん [2017/11/05(日) 07:06:11.45 ID:vRj0Z3ir0.net]
ここでlockという名称は何でもいいんですよね。要するにstructを生成するだけだから。
2か所でlockしたいような場合には使えないという欠点があるね。
void foo() { 
  lock_intterupt lock; // 以下割り込み禁止 
  if (...) { 
     .... 
     return; 
  } 
  lock.unlock();
..... 
  ..... 
  ..... 
  lock.relock(); // ここでも割り込み禁止 
  if (...) { 
     .... 
     return; 
  } 
  ..... 
  return;        // ここでlock(割り込み禁止)した部分が解除される。 
} 
こうするにはどうしたらいい?



386 名前:デフォルトの名無しさん [2017/11/05(日) 07:09:12.73 ID:vRj0Z3ir0.net]
なんでclassにしないでstructなのだろうか?

387 名前:デフォルトの名無しさん [2017/11/05(日) 07:26:22.28 ID:vRj0Z3ir0.net]
C++の本見るとcout,cinの例が必ず出ているが、これは大きな間違いだな。なぜなら
1.マイコンではiostremは馬鹿でかくて使えない。だからcout,cinは使えない。
2.じゃあパソコンで使うのかというと、パソコンならjavaかC#があるのにC++なんて
使うのは間違い。
以上の理由からサンプルにcout使うのは馬鹿。

388 名前:デフォルトの名無しさん [2017/11/05(日) 07:28:47.99 ID:vRj0Z3ir0.net]
というか、もっとmiimaizeしたiostream実装しろよな。といいたい。

389 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 08:04:41.58 ID:3uuR82Hq0.net]
>>381
> 2か所でlockしたいような場合には使えないという欠点があるね。
ブロックも知らんのかよ...

void foo(){
 {
  lock_intterupt lock; // 以下割り込み禁止 
  if(...){
   ...
   return;
  } 
 }
 ...
 ...
 {
  lock_interrupt lock; // ここでも割り込み禁止
  if(...){
   ...
   return;
  } 
 }
 return; // ここでlock(割り込み禁止)した部分が解除される。
}

390 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 09:19:24.45 ID:fHP76uUy0.net]
メンバーイニシャライザーなんて上級者向け

391 名前:デフォルトの名無しさん [2017/11/05(日) 09:44:11.28 ID:vRj0Z3ir0.net]
>>ブロックも知らんのかよ...
そういうのがあったのか。 ブロックってスコープだけの問題ではないんだ。
スコープ外れるとディストラクトされるんだ。
いがいと使えるなー。

392 名前:デフォルトの名無しさん [2017/11/05(日) 09:47:03.86 ID:vRj0Z3ir0.net]
>メンバーイニシャライザーなんて上級者向け

イニシャルなんて基本中の基本なのに、上級者でしか使えないほど分かりづらい構造になっている。
素直に=をつかったらいいのにな。

393 名前:デフォルトの名無しさん [2017/11/05(日) 09:49:48.35 ID:vRj0Z3ir0.net]
 lock_interrupt(){ 
  masked = get_imask_ccr();
  set_imask_ccr(1); 
 }
これでいいじゃん。

394 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 10:01:45.17 ID:U5vPVsbz0.net]
物知らず自慢されても周りの人は当惑するだけですよ。
メンバーイニシャライザが何故必要なのかはメンバーイニシャライザでググってください。

395 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 10:06:52.16 ID:+AqtjiW/0.net]
自虐ネタですかね?



396 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 10:08:40.02 ID:t3ZH1B/20.net]
このスレ和むね

397 名前:デフォルトの名無しさん [2017/11/05(日) 10:23:28.34 ID:vRj0Z3ir0.net]
メンバーイニシャライザでググると

メリット1:const指定のメンバ変数の初期化ができる
メリット2:メンバイニシャライザの方が効率的
メリット3:クラスを継承する場合は、メンバイニシャライザに基底クラスのコンストラクタを記述します。
メリット4:メンバイニシャライザを使えるようになると、プログラミングが上手になったような気分になれます。

とあるが、
1はあまり意味がない。constを初期化しないで使うケースは皆無。
2は理由が不明。わかり難いし、効率が変わる理由がない。効率を変えることができるなら、コンストラクタの効率も上げればいいだけだ。
3も意味不明だ。基底クラスのコンストラクタをイニシャライザに記入する必要性がないと思うが、出来ないのか? この方法でしか
できないのならそれはデメリットというのが正しい日本語だ。
4はこれが最大のメリットだろうな。

398 名前:デフォルトの名無しさん [2017/11/05(日) 10:28:17.46 ID:vRj0Z3ir0.net]
結論
 テクを自慢したい人以外はメンバーイニシャライザは使うべきではない。

399 名前:デフォルトの名無しさん [2017/11/05(日) 10:30:41.33 ID:qHZ+DCMx0.net]
>>393
代入するまでそれがどういう状態になるのか考えた?

400 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 10:31:58.48 ID:GarpakNhr.net]
>>393の文才に嫉妬

401 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 10:33:41.73 ID:PHl2cqXG0.net]
上級者すげー

402 名前:デフォルトの名無しさん [2017/11/05(日) 10:38:30.72 ID:vRj0Z3ir0.net]
>代入するまでそれがどういう状態になるのか考えた?

ん? constとは定数ですよ。代入なんてありえません。設定です。コンパイラーがシコシコ考えて設定済みです。
プログラムが走る時には最初から決まってるもの、最初を決めるのに別にイニシャライザで
やろうが、コンストラクタでやろうが関係ないです。はい。

ちがった?

403 名前:デフォルトの名無しさん [2017/11/05(日) 10:42:52.94 ID:qHZ+DCMx0.net]
>>398
うん。君はC++使わない方がいいね。

404 名前:デフォルトの名無しさん [2017/11/05(日) 10:44:47.64 ID:tNj/Rw6Vd.net]
c#とかのconstと勘違いしてない?

405 名前:デフォルトの名無しさん [2017/11/05(日) 10:51:53.00 ID:bjKo+Lyid.net]
初期化と代入の違い
constとコンパイル時定数の違い



406 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 10:52:44.25 ID:W+ILxFMJ0.net]
>>398
適当にググって済ますんじゃなくて真っ当なc++本を一通り読んでから帰ってこい。
あと組み込みを前提に考えるのもやめとけ。

407 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 11:05:07.65 ID:3uuR82Hq0.net]
>>398
> constとは定数ですよ。
残念ながら違う
class c {
private:
 const int n;
public:
 c(const int x): n(x){}
 ...
}
なんてことができる

408 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 11:16:27.20 ID:+AqtjiW/0.net]
>>402
そんな本は存在しない。

409 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 11:25:28.59 ID:edJGSUmw0.net]
メンバーイニシャライザの構文は必要悪
だとは感じる

基底クラスやconstメンバの初期化構文が別途必要だったというのは必要悪ながら必要性がワカルが
その他のメリットはあんまはっきりしない

410 名前:デフォルトの名無しさん [2017/11/05(日) 11:38:09.47 ID:vRj0Z3ir0.net]
>class c {
>private:
> const int n;
>public:
> c(const int x): n(x){}
> ...
>}
>なんてことができる。

 定数ではなくて、変更禁止の変数ってことだね。それにどれだけ意味があるんだろう。
イニシャライザ―でしか変更できないんでしょ。クラスを生成したときにしか設定できない変数になる
から、定数と同じ機能しかないよ。
const int n = 9600;って書く方が分かりやすい。

しかし別のインスタンスを生成する時は
c rs(115200);みたいに初期値を変更したい場合がある。これを実現できるのはイニシャライザ以外にはないってことか。
なるほど。
全く意味がないってことはないな。たしかにメリットはある。

411 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 11:46: ]
[ここ壊れてます]

412 名前:35.42 ID:8p1KlMD80.net mailto: 目醒ましたら香ばしいのがおるなあ []
[ここ壊れてます]

413 名前:デフォルトの名無しさん [2017/11/05(日) 11:49:30.00 ID:vRj0Z3ir0.net]
結論を変更
メリット1:クラスのインスタンスごとにconst指定のメンバ変数のユニークな初期化ができる
メリット2:const指定のメンバ変数はユニークに設定できるにも拘わらずコードをまったく消費しない。

414 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 11:50:18.72 ID:brx6OlnVM.net]
>>405
まあ構文はわかり辛いよな
int n; で定義してるのに : n(1) とかはあ?って感じだし
かと言って c(): n = 1 {} って言うのもなれてないせいかいまいちだしね

415 名前:デフォルトの名無しさん [2017/11/05(日) 12:04:33.48 ID:vRj0Z3ir0.net]
コンストラクタの構文があるんだから並置してつくるべきだね。
たとえはこんな感じだ。
class cass {
private:
 const int n;
public:
 cass(const int x){}
cass{ n = 9600 }
 ...
}



416 名前:デフォルトの名無しさん [2017/11/05(日) 12:06:36.32 ID:vRj0Z3ir0.net]
~cass()があるんだから
!cass()でもいい。

417 名前:デフォルトの名無しさん [2017/11/05(日) 12:25:46.31 ID:bjKo+Lyid.net]
>>406
> const int n = 9600 って書く方が分かりやすい

C++のconstは、ユーザー入力など実行時に決まる値に固定化した変数を作れる

418 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 12:29:36.35 ID:uz/X8WP/M.net]
>>410
こいつはコンストラクタを複数持てることも知らんのか...
マジで初心者スレに行けよ

【初心者歓迎】C/C++室 Ver.102【環境依存OK】
mevius.2ch.net/test/read.cgi/tech/1509780815/

419 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 12:31:24.75 ID:uz/X8WP/M.net]
>>412
そう言う意味ではC#のreadonlyの方が近い感じだな

420 名前:デフォルトの名無しさん [2017/11/05(日) 12:58:59.38 ID:vRj0Z3ir0.net]
>C++のconstは、ユーザー入力など実行時に決まる値に固定化した変数を作れる

実行時は無理でしょ。インスタンス生成時でしょ。見かけ上実行時にインスタンスを生成することで
可能というだけですよね。

421 名前:デフォルトの名無しさん [2017/11/05(日) 12:59:54.85 ID:vRj0Z3ir0.net]
>こいつはコンストラクタを複数持てることも知らんのか...

オーバーロードってことかな? イニシャライザとはなんも関係ないね。

422 名前:デフォルトの名無しさん [2017/11/05(日) 13:00:39.74 ID:vRj0Z3ir0.net]
>あと組み込みを前提に考えるのもやめとけ。

C++は組み込みにしか活路がない。というか組み込みに特化すべきだと思う。
PCの場合はJavaとかC#の方が圧倒的にいいからね。

組み込みにCではなくてC++を使うべき最大の理由は?
最大のメリットはScopeが使えることだと思う。NameSpaceとかブロックとかだね。
まあClassの基本構造もスコープを制限できるという意味では含める。これらを使うだけでも
価値がある。

Cでは少しプログラムが大きくなると名前付けで混乱してくる。多少はコード効率が落ちてもC++の方がいい。
C++はすでに化石かと思っていたがなかなか使えそう。

423 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 13:07:42.41 ID:CS19J9ATM.net]
普通にデータベースとかC++で書かれてるが…

424 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 13:12:57.94 ID:PxmV+gVs0.net]
多分パフォーマンス重視のソフトとか一つも知らないんじゃね

425 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 13:15:03.92 ID:+AqtjiW/0.net]
速度が要求される用途ということは、アセンブラの代替としての言語なのだ。

高級言語志向の奴はKotlinでも使ってろ。



426 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 13:17:22.43 ID:PxmV+gVs0.net]
C++で数百万行になるプロジェクトをアセで書けと?

427 名前:デフォルトの名無しさん [2017/11/05(日) 13:18:14.72 ID:bjKo+Lyid.net]
>>415
たとえばインスタンス生成時のシステム時刻をconst変数にセットするとする。
これを実行時と呼ばずになんと呼ぶんだ?

428 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 13:31:02.52 ID:kyKiHR5g0.net]
メンバイニシャライザって、基本だろ。
初期化と代入は異なるから、マシン語も異なるし、効率的

君らは、実行ファイル中の、BSS セクションとか、
異なるセクション

429 名前:フデータが、異なるマシン語になる事も、知らんのか? []
[ここ壊れてます]

430 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 13:47:24.79 ID:+AqtjiW/0.net]
もはやマシン語がバズワードに見える

431 名前:デフォルトの名無しさん [2017/11/05(日) 13:47:40.95 ID:bjKo+Lyid.net]
>>423
そんなのはプロでもなきゃあまり知らないんじゃない?

432 名前:デフォルトの名無しさん [2017/11/05(日) 13:52:54.16 ID:vRj0Z3ir0.net]
>たとえばインスタンス生成時のシステム時刻をconst変数にセットするとする。
>これを実行時と呼ばずになんと呼ぶんだ?

クラスを起点で説明するときには、実行時というのはクラスインスタンスのメソードを実行したり
プロパティにアクセスする時が実行時だね。
インスタンス生成時とは区別したほうが分かりやすい。
クラスは大まかには
1.生成して
2.実行して
3.消滅する
というサイクルがある。
constは生成時にしか設定できない。

433 名前:デフォルトの名無しさん [2017/11/05(日) 13:59:00.72 ID:bjKo+Lyid.net]
>>426
少なくともC++においては実行時とは「コンパイル時」に対比する言葉だ。
「クラスを起点に説明する」なんて知らんがな
独自定義か?

434 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 14:41:08.77 ID:3uuR82Hq0.net]
>>415
> 実行時は無理でしょ。インスタンス生成時でしょ。見かけ上実行時にインスタンスを生成することで
> 可能というだけですよね。
見かけ上?
意味わからん
インスタンス生成時=実行時なんだが w

>>416
オーバーロードしたコンストラクタ毎に異なる初期値を与えられるんだが>>410の構文でどうやって実現するつもりなんだよ w

435 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 14:59:59.34 ID:NfAeb+vj0.net]
メンバイニシャライザの構文、
class Aclass {
public:
 Aclass(int val) : _member(val) {}
...
}
の評判が悪いけど、C++11から使えるようになった{}初期化なら
いくらかマシじゃないかな。
class Aclass {
public:
 Aclass(int val) : _member {val} {}
...
}

メンバに初期値を与える部分が関数呼び出しに見える、
という事態は解消されてるかと。



436 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 15:13:21.78 ID:edJGSUmw0.net]
>>409
なんでそのnのケースで構文を新たに作る話になりますか…

437 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 15:37:01.01 ID:U5vPVsbz0.net]
お前ら
T t(args);
って形の初期化付き変数宣言使ったことも見たこともない素人ばかりかよ...

インスタンスとクラスの違いも知らずに他人と話そうとする迷惑な人もいるし。

438 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 15:40:38.86 ID:+AqtjiW/0.net]
自虐ネタするときはひろしですって言ってください。

439 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 15:47:09.77 ID:3uuR82Hq0.net]
>>430
ん?

> まあ構文はわかり辛いよな
って言う日本語を理解できない人なの?

440 名前:デフォルトの名無しさん [2017/11/05(日) 16:23:38.88 ID:vRj0Z3ir0.net]
>オーバーロードしたコンストラクタ毎に異なる初期値を与えられるんだが>>410の構文でどうやって実現するつもりなんだよ w

ass():{ assmember = 12; }{
....
}
ass(int you ):{ assmember = 99 }{
....
}

441 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 16:32:02.93 ID:3uuR82Hq0.net]
>>434
しれっと>>410の構文変えてどうするよ w
>>410の時点じゃ知らなかったんだろ?

442 名前:デフォルトの名無しさん [2017/11/05(日) 16:34:19.30 ID:vRj0Z3ir0.net]
知らないでもすぐにまともな構文が考え付くというのに、わざわざ仕様を変更したというのに
またしてもろくでもない構文とは、どういうことだ。

443 名前:デフォルトの名無しさん [2017/11/05(日) 16:38:07.45 ID:qHZ+DCMx0.net]
こんな浅い思いつきだけで喋ってるやつによくつき合ってるな

444 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 17:21:19.00 ID:edJGSUmw0.net]
>>433
> まあ構文はわかり辛いよな
という国語はわかったつもりだったが>>409のような変態構文の追加提案に至る必然性がわからん…
そのケースならコンストラクタ内でn=1でええやん?

なお初期化と代入は違うという意見は
コンパイラのコピコン呼び出し回数削減最適化を前提とする限り、
あんまメンバ初期化構文の支持理由としては弱いかなと、(いうのが元レス>>405

445 名前:デフォルトの名無しさん [2017/11/05(日) 17:33:27.29 ID:qHZ+DCMx0.net]
>>438
コピー出来ないクラスはどうすんだよ。コンストラクタ内でのメンバーの代入はメンバーの構築とみなすという特殊ルールでも付けるのか?



446 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 17:35:00.88 ID:3uuR82Hq0.net]
>>438
>>409の構文にケチをつけたいだけなのはわかったよ

447 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 17:42:24.41 ID:3uuR82Hq0.net]
>>439
> コピー出来ないクラスはどうすんだよ。
const 云々言ってるなかで>>438みたいなレスする程度の理解力だから許してやれよ w

> コンストラクタ内でのメンバーの代入はメンバーの構築とみなすという特殊ルールでも付けるのか?
C#のreadonlyはそんな感じだな

448 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 17:44:56.54 ID:edJGSUmw0.net]
>>439
まあYESということもできる

クラスFooのメンバm_a (∈クラスT)は、Fooのコンストラクタ実行前に構築されているはずはないのだから
 m_a = (some クラスTのオブジェクト)
というのがコンストラクタ内に現れたら、むしろそれを代入と解釈するわけにはいかない
すわなち話がただちにコピコンの出番に絞られる

449 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 17:53:44.93 ID:edJGSUmw0.net]
>>441
ちょっ漏れもconst云々は>>405で言及済みなんだがガン無視カヨ
何でも俺の仕業かよ…

>>440
いや新たな構文の追加提案自体の罪を問いたい
>>405の通り、基底クラスとconstメンバの初期化については現行のメンバ初期化構文は必要悪なんであって、
それ自体は全否定まではしないが、
基底クラスとconstメンバの初期化以外の用途はコンストラクタ内でのメンバへの(一見)代入(に見える構文)で十分なのでわ!?
というのが漏れのスタンス

450 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 17:58:22.61 ID:edJGSUmw0.net]
まあ漏れの案の欠陥としては、
コンストラクタ内でthisを他の関数bar()(すでにコンパイル済みかもしれない)に渡して
barの中でthis->m_aに代入するのはどうなんじゃ、というのはあるが
(C#はこの点現行C++と同じ実行時コストを支払っているハズ…
 つまりデフォルトコンストラクタでFoo::m_aを構築した状態でコンストラクタに入る

451 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 17:59:06.73 ID:3uuR82Hq0.net]
>>443
> 基底クラスとconstメンバの初期化以外の用途はコンストラクタ内でのメンバへの(一見)代入(に見える構文)で十分なのでわ!?
お前がそう思うのは勝手だが、わざわざ用途毎に構文を分けるのは悪手だろ
って言うだけのこと

452 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 18:10:51.69 ID:edJGSUmw0.net]
スマン>>444の末尾2行は抹消
C#はオブジェクトを参照型でしか扱わないから、明示的にFoo::m_aに対して
どっかで明治t系にnew T()を書かねば何も起きないから、書かなかった場合の実行時コストも糞も無い

453 名前:デフォルトの名無しさん [2017/11/05(日) 18:14:02.62 ID:XS4+4qja0.net]
↓structもあるとか言い出すアホ

454 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 18:31:44.21 ID:edJGSUmw0.net]
いやすまん>>442の方針にはまだ欠陥があったわ;
Foo::Foo() {
 m_a = 1; // (1)
 m_a = 2; // (2)
}
と書いた場合、(1)は>>442の方針でm_aの初期化とみなすことはできるが(2)をどう解釈すべきか曖昧になる
やっぱメンバの初期化はコンストラクタ本体実行前に1回だけ行われるようにする現行メンバ初期化構文の方がスマートじゃわ;;

というわけで完全に自己解決しますた!

455 名前:デフォルトの名無しさん [2017/11/05(日) 18:57:45.52 ID:rSDVGL6P0.net]
しっかし「漏れ」って久々に聞いたぞ。



456 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 19:58:56.84 ID:miuEyx390.net]
黎明期からROMやっててUNIX板の騒動を解決した御仁もいるんだろ

457 名前:デフォルトの名無しさん mailto:sage [2017/11/05(日) 21:08:22.04 ID:g4RG1qZKM.net]
>>361
<<を使ったフォーマットだと語順を簡単に変えられなくて翻訳対応しづらいという問題もある。






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

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

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