次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part131
http://mevius.2ch.net/test/read.cgi/tech/1501295308/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1500329247/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part132
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ (ワッチョイ faeb-wbjw)
2017/10/10(火) 00:11:34.01ID:nc/5PI4P0382デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:09:12.73ID:vRj0Z3ir0 なんでclassにしないでstructなのだろうか?
383デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:26:22.28ID:vRj0Z3ir0 C++の本見るとcout,cinの例が必ず出ているが、これは大きな間違いだな。なぜなら
1.マイコンではiostremは馬鹿でかくて使えない。だからcout,cinは使えない。
2.じゃあパソコンで使うのかというと、パソコンならjavaかC#があるのにC++なんて
使うのは間違い。
以上の理由からサンプルにcout使うのは馬鹿。
1.マイコンではiostremは馬鹿でかくて使えない。だからcout,cinは使えない。
2.じゃあパソコンで使うのかというと、パソコンならjavaかC#があるのにC++なんて
使うのは間違い。
以上の理由からサンプルにcout使うのは馬鹿。
384デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 07:28:47.99ID:vRj0Z3ir0 というか、もっとmiimaizeしたiostream実装しろよな。といいたい。
385デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 08:04:41.58ID:3uuR82Hq0 >>381
> 2か所でlockしたいような場合には使えないという欠点があるね。
ブロックも知らんのかよ...
void foo(){
{
lock_intterupt lock; // 以下割り込み禁止
if(...){
...
return;
}
}
...
...
{
lock_interrupt lock; // ここでも割り込み禁止
if(...){
...
return;
}
}
return; // ここでlock(割り込み禁止)した部分が解除される。
}
> 2か所でlockしたいような場合には使えないという欠点があるね。
ブロックも知らんのかよ...
void foo(){
{
lock_intterupt lock; // 以下割り込み禁止
if(...){
...
return;
}
}
...
...
{
lock_interrupt lock; // ここでも割り込み禁止
if(...){
...
return;
}
}
return; // ここでlock(割り込み禁止)した部分が解除される。
}
386デフォルトの名無しさん (ワッチョイ d2fb-K7eU)
2017/11/05(日) 09:19:24.45ID:fHP76uUy0 メンバーイニシャライザーなんて上級者向け
387デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:44:11.28ID:vRj0Z3ir0 >>ブロックも知らんのかよ...
そういうのがあったのか。 ブロックってスコープだけの問題ではないんだ。
スコープ外れるとディストラクトされるんだ。
いがいと使えるなー。
そういうのがあったのか。 ブロックってスコープだけの問題ではないんだ。
スコープ外れるとディストラクトされるんだ。
いがいと使えるなー。
388デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:47:03.86ID:vRj0Z3ir0 >メンバーイニシャライザーなんて上級者向け
イニシャルなんて基本中の基本なのに、上級者でしか使えないほど分かりづらい構造になっている。
素直に=をつかったらいいのにな。
イニシャルなんて基本中の基本なのに、上級者でしか使えないほど分かりづらい構造になっている。
素直に=をつかったらいいのにな。
389デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 09:49:48.35ID:vRj0Z3ir0 lock_interrupt(){
masked = get_imask_ccr();
set_imask_ccr(1);
}
これでいいじゃん。
masked = get_imask_ccr();
set_imask_ccr(1);
}
これでいいじゃん。
390デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/05(日) 10:01:45.17ID:U5vPVsbz0 物知らず自慢されても周りの人は当惑するだけですよ。
メンバーイニシャライザが何故必要なのかはメンバーイニシャライザでググってください。
メンバーイニシャライザが何故必要なのかはメンバーイニシャライザでググってください。
391デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 10:06:52.16ID:+AqtjiW/0 自虐ネタですかね?
392デフォルトの名無しさん (ワッチョイ 2ee8-Swf1)
2017/11/05(日) 10:08:40.02ID:t3ZH1B/20 このスレ和むね
393デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 10:23:28.34ID:vRj0Z3ir0 メンバーイニシャライザでググると
メリット1:const指定のメンバ変数の初期化ができる
メリット2:メンバイニシャライザの方が効率的
メリット3:クラスを継承する場合は、メンバイニシャライザに基底クラスのコンストラクタを記述します。
メリット4:メンバイニシャライザを使えるようになると、プログラミングが上手になったような気分になれます。
とあるが、
1はあまり意味がない。constを初期化しないで使うケースは皆無。
2は理由が不明。わかり難いし、効率が変わる理由がない。効率を変えることができるなら、コンストラクタの効率も上げればいいだけだ。
3も意味不明だ。基底クラスのコンストラクタをイニシャライザに記入する必要性がないと思うが、出来ないのか? この方法でしか
できないのならそれはデメリットというのが正しい日本語だ。
4はこれが最大のメリットだろうな。
メリット1:const指定のメンバ変数の初期化ができる
メリット2:メンバイニシャライザの方が効率的
メリット3:クラスを継承する場合は、メンバイニシャライザに基底クラスのコンストラクタを記述します。
メリット4:メンバイニシャライザを使えるようになると、プログラミングが上手になったような気分になれます。
とあるが、
1はあまり意味がない。constを初期化しないで使うケースは皆無。
2は理由が不明。わかり難いし、効率が変わる理由がない。効率を変えることができるなら、コンストラクタの効率も上げればいいだけだ。
3も意味不明だ。基底クラスのコンストラクタをイニシャライザに記入する必要性がないと思うが、出来ないのか? この方法でしか
できないのならそれはデメリットというのが正しい日本語だ。
4はこれが最大のメリットだろうな。
394デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 10:28:17.46ID:vRj0Z3ir0 結論
テクを自慢したい人以外はメンバーイニシャライザは使うべきではない。
テクを自慢したい人以外はメンバーイニシャライザは使うべきではない。
395デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 10:30:41.33ID:qHZ+DCMx0 >>393
代入するまでそれがどういう状態になるのか考えた?
代入するまでそれがどういう状態になるのか考えた?
396デフォルトの名無しさん (オッペケ Srf1-K7eU)
2017/11/05(日) 10:31:58.48ID:GarpakNhr >>393の文才に嫉妬
397デフォルトの名無しさん (ワッチョイ 1e7f-3ZLQ)
2017/11/05(日) 10:33:41.73ID:PHl2cqXG0 上級者すげー
398デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 10:38:30.72ID:vRj0Z3ir0 >代入するまでそれがどういう状態になるのか考えた?
ん? constとは定数ですよ。代入なんてありえません。設定です。コンパイラーがシコシコ考えて設定済みです。
プログラムが走る時には最初から決まってるもの、最初を決めるのに別にイニシャライザで
やろうが、コンストラクタでやろうが関係ないです。はい。
ちがった?
ん? constとは定数ですよ。代入なんてありえません。設定です。コンパイラーがシコシコ考えて設定済みです。
プログラムが走る時には最初から決まってるもの、最初を決めるのに別にイニシャライザで
やろうが、コンストラクタでやろうが関係ないです。はい。
ちがった?
399デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 10:42:52.94ID:qHZ+DCMx0 >>398
うん。君はC++使わない方がいいね。
うん。君はC++使わない方がいいね。
400デフォルトの名無しさん (スプッッ Sdc2-OC8P)
2017/11/05(日) 10:44:47.64ID:tNj/Rw6Vd c#とかのconstと勘違いしてない?
401デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 10:51:53.00ID:bjKo+Lyid 初期化と代入の違い
constとコンパイル時定数の違い
constとコンパイル時定数の違い
402デフォルトの名無しさん (ワッチョイ 22f9-hwZj)
2017/11/05(日) 10:52:44.25ID:W+ILxFMJ0403デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 11:05:07.65ID:3uuR82Hq0 >>398
> constとは定数ですよ。
残念ながら違う
class c {
private:
const int n;
public:
c(const int x): n(x){}
...
}
なんてことができる
> constとは定数ですよ。
残念ながら違う
class c {
private:
const int n;
public:
c(const int x): n(x){}
...
}
なんてことができる
404デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 11:16:27.20ID:+AqtjiW/0 >>402
そんな本は存在しない。
そんな本は存在しない。
405デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 11:25:28.59ID:edJGSUmw0 メンバーイニシャライザの構文は必要悪
だとは感じる
基底クラスやconstメンバの初期化構文が別途必要だったというのは必要悪ながら必要性がワカルが
その他のメリットはあんまはっきりしない
だとは感じる
基底クラスやconstメンバの初期化構文が別途必要だったというのは必要悪ながら必要性がワカルが
その他のメリットはあんまはっきりしない
406デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 11:38:09.47ID:vRj0Z3ir0 >class c {
>private:
> const int n;
>public:
> c(const int x): n(x){}
> ...
>}
>なんてことができる。
定数ではなくて、変更禁止の変数ってことだね。それにどれだけ意味があるんだろう。
イニシャライザ―でしか変更できないんでしょ。クラスを生成したときにしか設定できない変数になる
から、定数と同じ機能しかないよ。
const int n = 9600;って書く方が分かりやすい。
しかし別のインスタンスを生成する時は
c rs(115200);みたいに初期値を変更したい場合がある。これを実現できるのはイニシャライザ以外にはないってことか。
なるほど。
全く意味がないってことはないな。たしかにメリットはある。
>private:
> const int n;
>public:
> c(const int x): n(x){}
> ...
>}
>なんてことができる。
定数ではなくて、変更禁止の変数ってことだね。それにどれだけ意味があるんだろう。
イニシャライザ―でしか変更できないんでしょ。クラスを生成したときにしか設定できない変数になる
から、定数と同じ機能しかないよ。
const int n = 9600;って書く方が分かりやすい。
しかし別のインスタンスを生成する時は
c rs(115200);みたいに初期値を変更したい場合がある。これを実現できるのはイニシャライザ以外にはないってことか。
なるほど。
全く意味がないってことはないな。たしかにメリットはある。
407デフォルトの名無しさん (ワッチョイ beeb-Q/5A)
2017/11/05(日) 11:46:35.42ID:8p1KlMD80 目醒ましたら香ばしいのがおるなあ
408デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 11:49:30.00ID:vRj0Z3ir0 結論を変更
メリット1:クラスのインスタンスごとにconst指定のメンバ変数のユニークな初期化ができる
メリット2:const指定のメンバ変数はユニークに設定できるにも拘わらずコードをまったく消費しない。
メリット1:クラスのインスタンスごとにconst指定のメンバ変数のユニークな初期化ができる
メリット2:const指定のメンバ変数はユニークに設定できるにも拘わらずコードをまったく消費しない。
409デフォルトの名無しさん (ドコグロ MM75-r/51)
2017/11/05(日) 11:50:18.72ID:brx6OlnVM410デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:04:33.48ID:vRj0Z3ir0 コンストラクタの構文があるんだから並置してつくるべきだね。
たとえはこんな感じだ。
class cass {
private:
const int n;
public:
cass(const int x){}
cass{ n = 9600 }
...
}
たとえはこんな感じだ。
class cass {
private:
const int n;
public:
cass(const int x){}
cass{ n = 9600 }
...
}
411デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:06:36.32ID:vRj0Z3ir0 ~cass()があるんだから
!cass()でもいい。
!cass()でもいい。
412デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 12:25:46.31ID:bjKo+Lyid413デフォルトの名無しさん (ドコグロ MM0a-r/51)
2017/11/05(日) 12:29:36.35ID:uz/X8WP/M >>410
こいつはコンストラクタを複数持てることも知らんのか...
マジで初心者スレに行けよ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1509780815/
こいつはコンストラクタを複数持てることも知らんのか...
マジで初心者スレに行けよ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1509780815/
414デフォルトの名無しさん (ドコグロ MM0a-r/51)
2017/11/05(日) 12:31:24.75ID:uz/X8WP/M >>412
そう言う意味ではC#のreadonlyの方が近い感じだな
そう言う意味ではC#のreadonlyの方が近い感じだな
415デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:58:59.38ID:vRj0Z3ir0 >C++のconstは、ユーザー入力など実行時に決まる値に固定化した変数を作れる
実行時は無理でしょ。インスタンス生成時でしょ。見かけ上実行時にインスタンスを生成することで
可能というだけですよね。
実行時は無理でしょ。インスタンス生成時でしょ。見かけ上実行時にインスタンスを生成することで
可能というだけですよね。
416デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 12:59:54.85ID:vRj0Z3ir0 >こいつはコンストラクタを複数持てることも知らんのか...
オーバーロードってことかな? イニシャライザとはなんも関係ないね。
オーバーロードってことかな? イニシャライザとはなんも関係ないね。
417デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 13:00:39.74ID:vRj0Z3ir0 >あと組み込みを前提に考えるのもやめとけ。
C++は組み込みにしか活路がない。というか組み込みに特化すべきだと思う。
PCの場合はJavaとかC#の方が圧倒的にいいからね。
組み込みにCではなくてC++を使うべき最大の理由は?
最大のメリットはScopeが使えることだと思う。NameSpaceとかブロックとかだね。
まあClassの基本構造もスコープを制限できるという意味では含める。これらを使うだけでも
価値がある。
Cでは少しプログラムが大きくなると名前付けで混乱してくる。多少はコード効率が落ちてもC++の方がいい。
C++はすでに化石かと思っていたがなかなか使えそう。
C++は組み込みにしか活路がない。というか組み込みに特化すべきだと思う。
PCの場合はJavaとかC#の方が圧倒的にいいからね。
組み込みにCではなくてC++を使うべき最大の理由は?
最大のメリットはScopeが使えることだと思う。NameSpaceとかブロックとかだね。
まあClassの基本構造もスコープを制限できるという意味では含める。これらを使うだけでも
価値がある。
Cでは少しプログラムが大きくなると名前付けで混乱してくる。多少はコード効率が落ちてもC++の方がいい。
C++はすでに化石かと思っていたがなかなか使えそう。
418デフォルトの名無しさん (ワントンキン MM92-K6ym)
2017/11/05(日) 13:07:42.41ID:CS19J9ATM 普通にデータベースとかC++で書かれてるが…
419デフォルトの名無しさん (ワッチョイ 81b3-ip3T)
2017/11/05(日) 13:12:57.94ID:PxmV+gVs0 多分パフォーマンス重視のソフトとか一つも知らないんじゃね
420デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 13:15:03.92ID:+AqtjiW/0 速度が要求される用途ということは、アセンブラの代替としての言語なのだ。
高級言語志向の奴はKotlinでも使ってろ。
高級言語志向の奴はKotlinでも使ってろ。
421デフォルトの名無しさん (ワッチョイ 81b3-ip3T)
2017/11/05(日) 13:17:22.43ID:PxmV+gVs0 C++で数百万行になるプロジェクトをアセで書けと?
422デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 13:18:14.72ID:bjKo+Lyid423デフォルトの名無しさん (ワッチョイ 2e80-frTj)
2017/11/05(日) 13:31:02.52ID:kyKiHR5g0 メンバイニシャライザって、基本だろ。
初期化と代入は異なるから、マシン語も異なるし、効率的
君らは、実行ファイル中の、BSS セクションとか、
異なるセクションのデータが、異なるマシン語になる事も、知らんのか?
初期化と代入は異なるから、マシン語も異なるし、効率的
君らは、実行ファイル中の、BSS セクションとか、
異なるセクションのデータが、異なるマシン語になる事も、知らんのか?
424デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 13:47:24.79ID:+AqtjiW/0 もはやマシン語がバズワードに見える
425デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 13:47:40.95ID:bjKo+Lyid >>423
そんなのはプロでもなきゃあまり知らないんじゃない?
そんなのはプロでもなきゃあまり知らないんじゃない?
426デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 13:52:54.16ID:vRj0Z3ir0 >たとえばインスタンス生成時のシステム時刻をconst変数にセットするとする。
>これを実行時と呼ばずになんと呼ぶんだ?
クラスを起点で説明するときには、実行時というのはクラスインスタンスのメソードを実行したり
プロパティにアクセスする時が実行時だね。
インスタンス生成時とは区別したほうが分かりやすい。
クラスは大まかには
1.生成して
2.実行して
3.消滅する
というサイクルがある。
constは生成時にしか設定できない。
>これを実行時と呼ばずになんと呼ぶんだ?
クラスを起点で説明するときには、実行時というのはクラスインスタンスのメソードを実行したり
プロパティにアクセスする時が実行時だね。
インスタンス生成時とは区別したほうが分かりやすい。
クラスは大まかには
1.生成して
2.実行して
3.消滅する
というサイクルがある。
constは生成時にしか設定できない。
427デフォルトの名無しさん (スップ Sd62-3K0w)
2017/11/05(日) 13:59:00.72ID:bjKo+Lyid428デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 14:41:08.77ID:3uuR82Hq0429デフォルトの名無しさん (ワッチョイ 4193-ZDq4)
2017/11/05(日) 14:59:59.34ID:NfAeb+vj0 メンバイニシャライザの構文、
class Aclass {
public:
Aclass(int val) : _member(val) {}
...
}
の評判が悪いけど、C++11から使えるようになった{}初期化なら
いくらかマシじゃないかな。
class Aclass {
public:
Aclass(int val) : _member {val} {}
...
}
メンバに初期値を与える部分が関数呼び出しに見える、
という事態は解消されてるかと。
class Aclass {
public:
Aclass(int val) : _member(val) {}
...
}
の評判が悪いけど、C++11から使えるようになった{}初期化なら
いくらかマシじゃないかな。
class Aclass {
public:
Aclass(int val) : _member {val} {}
...
}
メンバに初期値を与える部分が関数呼び出しに見える、
という事態は解消されてるかと。
430デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 15:13:21.78ID:edJGSUmw0 >>409
なんでそのnのケースで構文を新たに作る話になりますか…
なんでそのnのケースで構文を新たに作る話になりますか…
431デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/05(日) 15:37:01.01ID:U5vPVsbz0 お前ら
T t(args);
って形の初期化付き変数宣言使ったことも見たこともない素人ばかりかよ...
インスタンスとクラスの違いも知らずに他人と話そうとする迷惑な人もいるし。
T t(args);
って形の初期化付き変数宣言使ったことも見たこともない素人ばかりかよ...
インスタンスとクラスの違いも知らずに他人と話そうとする迷惑な人もいるし。
432デフォルトの名無しさん (ワッチョイ ed83-Q/5A)
2017/11/05(日) 15:40:38.86ID:+AqtjiW/0 自虐ネタするときはひろしですって言ってください。
433デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 15:47:09.77ID:3uuR82Hq0434デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 16:23:38.88ID:vRj0Z3ir0 >オーバーロードしたコンストラクタ毎に異なる初期値を与えられるんだが>>410の構文でどうやって実現するつもりなんだよ w
ass():{ assmember = 12; }{
....
}
ass(int you ):{ assmember = 99 }{
....
}
ass():{ assmember = 12; }{
....
}
ass(int you ):{ assmember = 99 }{
....
}
435デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 16:32:02.93ID:3uuR82Hq0436デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/05(日) 16:34:19.30ID:vRj0Z3ir0 知らないでもすぐにまともな構文が考え付くというのに、わざわざ仕様を変更したというのに
またしてもろくでもない構文とは、どういうことだ。
またしてもろくでもない構文とは、どういうことだ。
437デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 16:38:07.45ID:qHZ+DCMx0 こんな浅い思いつきだけで喋ってるやつによくつき合ってるな
438デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 17:21:19.00ID:edJGSUmw0439デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/05(日) 17:33:27.29ID:qHZ+DCMx0 >>438
コピー出来ないクラスはどうすんだよ。コンストラクタ内でのメンバーの代入はメンバーの構築とみなすという特殊ルールでも付けるのか?
コピー出来ないクラスはどうすんだよ。コンストラクタ内でのメンバーの代入はメンバーの構築とみなすという特殊ルールでも付けるのか?
440デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 17:35:00.88ID:3uuR82Hq0441デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 17:42:24.41ID:3uuR82Hq0442デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 17:44:56.54ID:edJGSUmw0 >>439
まあYESということもできる
クラスFooのメンバm_a (∈クラスT)は、Fooのコンストラクタ実行前に構築されているはずはないのだから
m_a = (some クラスTのオブジェクト)
というのがコンストラクタ内に現れたら、むしろそれを代入と解釈するわけにはいかない
すわなち話がただちにコピコンの出番に絞られる
まあYESということもできる
クラスFooのメンバm_a (∈クラスT)は、Fooのコンストラクタ実行前に構築されているはずはないのだから
m_a = (some クラスTのオブジェクト)
というのがコンストラクタ内に現れたら、むしろそれを代入と解釈するわけにはいかない
すわなち話がただちにコピコンの出番に絞られる
443デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 17:53:44.93ID:edJGSUmw0444デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 17:58:22.61ID:edJGSUmw0 まあ漏れの案の欠陥としては、
コンストラクタ内でthisを他の関数bar()(すでにコンパイル済みかもしれない)に渡して
barの中でthis->m_aに代入するのはどうなんじゃ、というのはあるが
(C#はこの点現行C++と同じ実行時コストを支払っているハズ…
つまりデフォルトコンストラクタでFoo::m_aを構築した状態でコンストラクタに入る
コンストラクタ内でthisを他の関数bar()(すでにコンパイル済みかもしれない)に渡して
barの中でthis->m_aに代入するのはどうなんじゃ、というのはあるが
(C#はこの点現行C++と同じ実行時コストを支払っているハズ…
つまりデフォルトコンストラクタでFoo::m_aを構築した状態でコンストラクタに入る
445デフォルトの名無しさん (ワッチョイ 42b3-r/51)
2017/11/05(日) 17:59:06.73ID:3uuR82Hq0 >>443
> 基底クラスとconstメンバの初期化以外の用途はコンストラクタ内でのメンバへの(一見)代入(に見える構文)で十分なのでわ!?
お前がそう思うのは勝手だが、わざわざ用途毎に構文を分けるのは悪手だろ
って言うだけのこと
> 基底クラスとconstメンバの初期化以外の用途はコンストラクタ内でのメンバへの(一見)代入(に見える構文)で十分なのでわ!?
お前がそう思うのは勝手だが、わざわざ用途毎に構文を分けるのは悪手だろ
って言うだけのこと
446デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 18:10:51.69ID:edJGSUmw0 スマン>>444の末尾2行は抹消
C#はオブジェクトを参照型でしか扱わないから、明示的にFoo::m_aに対して
どっかで明治t系にnew T()を書かねば何も起きないから、書かなかった場合の実行時コストも糞も無い
C#はオブジェクトを参照型でしか扱わないから、明示的にFoo::m_aに対して
どっかで明治t系にnew T()を書かねば何も起きないから、書かなかった場合の実行時コストも糞も無い
447デフォルトの名無しさん (ワッチョイ 417f-dVlt)
2017/11/05(日) 18:14:02.62ID:XS4+4qja0 ↓structもあるとか言い出すアホ
448デフォルトの名無しさん (ワッチョイ 42bd-py9L)
2017/11/05(日) 18:31:44.21ID:edJGSUmw0449デフォルトの名無しさん (ワッチョイ 6e3e-cSXK)
2017/11/05(日) 18:57:45.52ID:rSDVGL6P0 しっかし「漏れ」って久々に聞いたぞ。
450デフォルトの名無しさん (ワッチョイ c212-Q/5A)
2017/11/05(日) 19:58:56.84ID:miuEyx390 黎明期からROMやっててUNIX板の騒動を解決した御仁もいるんだろ
451デフォルトの名無しさん (ブーイモ MM6d-Osc9)
2017/11/05(日) 21:08:22.04ID:g4RG1qZKM >>361
<<を使ったフォーマットだと語順を簡単に変えられなくて翻訳対応しづらいという問題もある。
<<を使ったフォーマットだと語順を簡単に変えられなくて翻訳対応しづらいという問題もある。
452デフォルトの名無しさん (ワッチョイ 79f2-7T4N)
2017/11/06(月) 04:26:03.89ID:2+QNBq450 なんか、相談室じゃなく、テクニックを披露し合って
自慢ごっこスレになってるな。
初心者は入れないし、もし書いたら、さげすむばかりだし。
本当に自慢ごっこスレだな。
おまえらだって、最初はなんにも知らなかった・わからなかったのに。
ちょっとわかる様になったら、自慢ごっこだな。
本当にわかっている人は、簡単な言語で良いソフトを作っているよ。
テクニック自慢ごっこはやめれ。
自慢ごっこスレになってるな。
初心者は入れないし、もし書いたら、さげすむばかりだし。
本当に自慢ごっこスレだな。
おまえらだって、最初はなんにも知らなかった・わからなかったのに。
ちょっとわかる様になったら、自慢ごっこだな。
本当にわかっている人は、簡単な言語で良いソフトを作っているよ。
テクニック自慢ごっこはやめれ。
453デフォルトの名無しさん (ワッチョイ fd23-S23b)
2017/11/06(月) 05:16:27.05ID:gbsDrhzw0 テクニックでもなんでもない
「c++知らない人の考えた正しいc++論」なんか要らんってだけ
「c++知らない人の考えた正しいc++論」なんか要らんってだけ
454デフォルトの名無しさん (ワッチョイ 1e7f-3ZLQ)
2017/11/06(月) 05:26:32.69ID:BSAOW8np0 煽れば答えを教えてくれると思ってるとでも思ってるのかねぇ。
まともな人はスルーするだけだし、テキトーに答える人がいてそれにかみつく人がいて荒れるいつもの流れ。
まともな人はスルーするだけだし、テキトーに答える人がいてそれにかみつく人がいて荒れるいつもの流れ。
455デフォルトの名無しさん (ワッチョイ 1e7f-3ZLQ)
2017/11/06(月) 05:30:04.94ID:BSAOW8np0456デフォルトの名無しさん (ワッチョイ 45c3-Q/5A)
2017/11/06(月) 05:52:30.70ID:YMdKjlXe0 visual studio comunity 2015のc++で下記コンソールプログラムを実行すると
「0x73AD36A8 (tmmon.dll) で例外がスローされました (ConsoleApplication1.exe 内)
: 0xC0000005: 場所 0x0058F180 の読み取り中にアクセス違反が発生しました」
というエラーが出て停止するんだけど、原因が分かったら教えてください
ちなみに、コンパイル時にエラーは出ないし、プログラムも実行できるけど、プログラムの終了時にエラーが出ます
tmmon.dllというのはウィルスバスター関係のソフトらしいので、もしかしたらそちら側の不具合かもしれないけど
#include <iostream>
#include <conio.h>
using namespace std;
#define num 5000
class CLASS_A {
};
int main()
{
CLASS_A** ppa = new CLASS_A*[num];
for (int i = 0; i < num; i++)
ppa[i] = new CLASS_A;
for (int i = 0; i < num; i++)
delete ppa[i];
delete ppa;
cout << "hit any key!" << endl;
char ch = (char)_getch();
return 0;
}
「0x73AD36A8 (tmmon.dll) で例外がスローされました (ConsoleApplication1.exe 内)
: 0xC0000005: 場所 0x0058F180 の読み取り中にアクセス違反が発生しました」
というエラーが出て停止するんだけど、原因が分かったら教えてください
ちなみに、コンパイル時にエラーは出ないし、プログラムも実行できるけど、プログラムの終了時にエラーが出ます
tmmon.dllというのはウィルスバスター関係のソフトらしいので、もしかしたらそちら側の不具合かもしれないけど
#include <iostream>
#include <conio.h>
using namespace std;
#define num 5000
class CLASS_A {
};
int main()
{
CLASS_A** ppa = new CLASS_A*[num];
for (int i = 0; i < num; i++)
ppa[i] = new CLASS_A;
for (int i = 0; i < num; i++)
delete ppa[i];
delete ppa;
cout << "hit any key!" << endl;
char ch = (char)_getch();
return 0;
}
457デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/06(月) 05:59:29.00ID:7ntrKCQE0 ステップ実行してどこで落ちてるか検証するべし。
これくらいのコードならおえるでしょ。
これくらいのコードならおえるでしょ。
458デフォルトの名無しさん (ワッチョイ e58a-snrl)
2017/11/06(月) 06:01:06.59ID:662yk6z20 少なくともdelete ppa; はdelete[] ppa; じゃなくちゃダメだろ
459デフォルトの名無しさん (ワッチョイ c68a-aGxP)
2017/11/06(月) 06:06:20.61ID:pcHZ0AZV0 C++のクラスのコーディングをCで表現しようとするとどんなコードになる?
460デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/06(月) 06:11:23.92ID:7ntrKCQE0 structで関数ポインタ持たせるとかあるけど。
変換規定はない。
変換規定はない。
461デフォルトの名無しさん (ワッチョイ 45c3-Q/5A)
2017/11/06(月) 06:31:31.92ID:YMdKjlXe0462デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/06(月) 07:31:40.53ID:z+KG8ZZn0463デフォルトの名無しさん (スップ Sd62-aGxP)
2017/11/06(月) 08:03:49.75ID:FJG0yfiKd464デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/06(月) 08:23:52.67ID:Z84gcoL/0465デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/06(月) 09:14:29.24ID:7ntrKCQE0466デフォルトの名無しさん (オッペケ Srf1-K7eU)
2017/11/06(月) 09:20:09.45ID:6kMDcvlvr >>456
>(tmmon.dll) で例外がスローされました
よくあること
Windowsだったらスタートメニューからメンテナンスツール(普通の管理画面ではない)を起動して
モジュールの全アンロードすると起こらなくなる
>(tmmon.dll) で例外がスローされました
よくあること
Windowsだったらスタートメニューからメンテナンスツール(普通の管理画面ではない)を起動して
モジュールの全アンロードすると起こらなくなる
467デフォルトの名無しさん (ワッチョイ 45c3-Q/5A)
2017/11/06(月) 09:48:56.37ID:YMdKjlXe0 >>464
エラーについて検索していたら、こちらのページにVisual studio 2017のdenev.exeと自作アプリの置いてあるフォルダを
ウィルスバスターの例外設定に追加して様子を見るようトレンドマイクロから回答されたという人がいたそうです。
私の場合は2015なので、とりあえず自作プログラムのフォルダを例外設定に追加したところエラーが出なくなりました。
なんか根本解決になっていないような気もするけど、とりあえずこれで様子を見てみます。
http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4148
ちなみに今気づいたのですが、エラーが出るのはVisual studio 2015のIDE上から実行したときだけで、
プログラム単体で実行したときはエラーは出ないようです。
回答してくださったみなさん、ありがとうございました
エラーについて検索していたら、こちらのページにVisual studio 2017のdenev.exeと自作アプリの置いてあるフォルダを
ウィルスバスターの例外設定に追加して様子を見るようトレンドマイクロから回答されたという人がいたそうです。
私の場合は2015なので、とりあえず自作プログラムのフォルダを例外設定に追加したところエラーが出なくなりました。
なんか根本解決になっていないような気もするけど、とりあえずこれで様子を見てみます。
http://dxlib.o.oo7.jp/cgi/patiobbs/patio.cgi?mode=view&no=4148
ちなみに今気づいたのですが、エラーが出るのはVisual studio 2015のIDE上から実行したときだけで、
プログラム単体で実行したときはエラーは出ないようです。
回答してくださったみなさん、ありがとうございました
468デフォルトの名無しさん (ワッチョイ 45c3-Q/5A)
2017/11/06(月) 09:51:12.88ID:YMdKjlXe0469デフォルトの名無しさん (ワッチョイ c29d-SaAB)
2017/11/06(月) 10:48:41.89ID:Z84gcoL/0 #include <boost/pool/pool_alloc.hpp>
サンプルをテスト使用としたらTIのCCSにはこのあたりのライブラリがないんだが、このライブラリって
古いのだろうな?
boost::fast_pool_allocator<int> とかをテストしたいのだが、新しいライブラリはどれになるんだろうか?
サンプルをテスト使用としたらTIのCCSにはこのあたりのライブラリがないんだが、このライブラリって
古いのだろうな?
boost::fast_pool_allocator<int> とかをテストしたいのだが、新しいライブラリはどれになるんだろうか?
470デフォルトの名無しさん (ワッチョイ 2e80-frTj)
2017/11/06(月) 12:11:13.49ID:FN/Llmne0471デフォルトの名無しさん (スップ Sd62-aGxP)
2017/11/06(月) 12:13:38.44ID:FJG0yfiKd >>465
C++ならできるだろうけどCだとできる...?
C++ならできるだろうけどCだとできる...?
472デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/06(月) 21:05:16.36ID:7ntrKCQE0473はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 066f-lboT)
2017/11/06(月) 21:12:28.45ID:MXn0CmOw0474デフォルトの名無しさん (ワッチョイ 4104-mbga)
2017/11/06(月) 21:14:53.41ID:7ntrKCQE0475デフォルトの名無しさん (ブーイモ MMb6-Osc9)
2017/11/06(月) 22:45:43.65ID:r9+CDuOfM >>471
glibを真似たらいいよ。
glibを真似たらいいよ。
476デフォルトの名無しさん (ワッチョイ 4980-VYVV)
2017/11/06(月) 22:51:39.40ID:z+KG8ZZn0 記法を似せたいだけならともかく、関数ポインタを使うところはC++でいうところのvirtual functionでそれをクラスのIFとするのはC++でもめったにやらんわな。
477デフォルトの名無しさん (ワッチョイ c28a-Lt6+)
2017/11/06(月) 23:44:50.11ID:SClVOYaP0 COM(Component Object Model)はC++及びCでバイナリ互換のオブジェクトを作ることが出来る
vtblの配置は言語仕様上は定められていないが、MSがCOM(OLE2)を実装するにあたって定めた配置にしている処理系が殆どだ
vtblの配置は言語仕様上は定められていないが、MSがCOM(OLE2)を実装するにあたって定めた配置にしている処理系が殆どだ
478デフォルトの名無しさん (ワッチョイ 469f-lboT)
2017/11/07(火) 02:44:04.83ID:5kOZtFPy0 BisonでC語風の言語作ってるのですが、代入の構文が衝突してしまい困っています。
bison.yy: conflicts: 5 shift/reduce
*の回数を記録、Identifier = expression という構文を作りたいのですが、いい方法ありませんか?
*の検出はC語風のポインターを使うための処理です。
assignList :
assign {$$=new StatementAssignList($1);}
|assignList assign {$$=$1->add($2);}
;
assign :
Identifier '[' expression ']' "=" expression {$$=new StatementAssignVariable($1,$3,$6);} // 変数に代入:名前[式]=式;
| Identifier "=" expression {$$=new StatementAssignVariable($1, 0,$3);} // 変数に代入:名前=式;
| "*" {$$=new StatementAssignPtr();}
;
class StatementAssignList : public Statement{
public: std::vector<Statement *>m_list;
~StatementAssignList(){for(auto &p:m_list) delete p;}
StatementAssignList(Statement*pStatement){m_list.push_back(pStatement);}
StatementAssignList *add(Statement *pStatement){m_list.push_back(pStatement);return this;};
}
現在は、m_listで、StatementAssignPtr()の個数を調べてStatementAssignVariableの処理につなぐことを考えてます。
bison.yy: conflicts: 5 shift/reduce
*の回数を記録、Identifier = expression という構文を作りたいのですが、いい方法ありませんか?
*の検出はC語風のポインターを使うための処理です。
assignList :
assign {$$=new StatementAssignList($1);}
|assignList assign {$$=$1->add($2);}
;
assign :
Identifier '[' expression ']' "=" expression {$$=new StatementAssignVariable($1,$3,$6);} // 変数に代入:名前[式]=式;
| Identifier "=" expression {$$=new StatementAssignVariable($1, 0,$3);} // 変数に代入:名前=式;
| "*" {$$=new StatementAssignPtr();}
;
class StatementAssignList : public Statement{
public: std::vector<Statement *>m_list;
~StatementAssignList(){for(auto &p:m_list) delete p;}
StatementAssignList(Statement*pStatement){m_list.push_back(pStatement);}
StatementAssignList *add(Statement *pStatement){m_list.push_back(pStatement);return this;};
}
現在は、m_listで、StatementAssignPtr()の個数を調べてStatementAssignVariableの処理につなぐことを考えてます。
479デフォルトの名無しさん (ワッチョイ 1e7f-3ZLQ)
2017/11/07(火) 04:38:27.99ID:PQkUnwQq0 >>478
expressionがどうなってるのか知らないけどその文法だと
a=expr * a=expr * *
みたいに書けてしまうけど良いのか?
「左辺に書けるもの」を分けて整理すべし
C言語風ならC言語の文法を参考にしてもいいと思うけど
expressionがどうなってるのか知らないけどその文法だと
a=expr * a=expr * *
みたいに書けてしまうけど良いのか?
「左辺に書けるもの」を分けて整理すべし
C言語風ならC言語の文法を参考にしてもいいと思うけど
480デフォルトの名無しさん (ワッチョイ 469f-lboT)
2017/11/07(火) 05:07:39.94ID:5kOZtFPy0 アドバイスありがとうございます。
expressionは、 =禁止していますので、a = expr*a=expr * * は出来ないようにしてます。
手動で*の数を記述してみたのですが、conflicts: 3 shift/reduce となって混乱してます。
こんな感じ。。StatementAssignVariable()の第一引数を *の数にして実験。
statement :
Identifier "=" expression {$$=new StatementAssignVariable(0, 省略); }
| "*" Identifier "=" expression { $$= new StatementAssignVariable(1, 省略); }
| "*" "*" Identifier "=" expression { $$= new StatementAssignVariable(2, 省略); }
;
gcc 3はbisonのソース有ったので見たのですが、難解でしたorz
構文の設計ムズカシイ
conflicts: 3 shift/reduce無視しちゃっていいのかなぁ。。
expressionは、 =禁止していますので、a = expr*a=expr * * は出来ないようにしてます。
手動で*の数を記述してみたのですが、conflicts: 3 shift/reduce となって混乱してます。
こんな感じ。。StatementAssignVariable()の第一引数を *の数にして実験。
statement :
Identifier "=" expression {$$=new StatementAssignVariable(0, 省略); }
| "*" Identifier "=" expression { $$= new StatementAssignVariable(1, 省略); }
| "*" "*" Identifier "=" expression { $$= new StatementAssignVariable(2, 省略); }
;
gcc 3はbisonのソース有ったので見たのですが、難解でしたorz
構文の設計ムズカシイ
conflicts: 3 shift/reduce無視しちゃっていいのかなぁ。。
481デフォルトの名無しさん (ワッチョイ 4502-S32u)
2017/11/07(火) 05:27:52.17ID:2eQgtTM30 > コンパイル時にエラーは出ないし、プログラムも実行できるけど、プログラムの終了時にエラー
スタック破壊の典型的な症状だな
スタック破壊の典型的な症状だな
■ このスレッドは過去ログ倉庫に格納されています
