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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2018/12/28(金) 06:04:52.38 ID:ufThBpcD.net]
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/

752 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:32:15.05 ID:xVickGeK.net]
便乗質問でごめんやけど

delete [] p;
この場合deleteはどうやってサイズ調べてんの?

753 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:33:32.91 ID:i1gu3hXZ.net]
>>750
char *cpで宣言してるならその計算じゃ配列サイズはとれないよ。

754 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:33:42.86 ID:u0RxZCyH.net]
要素数の算出は
sizeof(配列) / sizeof(配列[0]) または sizeof(配列) / sizeof(*配列)
ではなかろうか?

755 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:47:35.09 ID:Nd0ou12Q.net]
除算は遅いからなぁ

756 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 10:18:57.28 ID:u0RxZCyH.net]
コンパイル時に確定する値だから
実行時には定数として埋まってるんでないの?
(ほんとんどの環境で インタープリターはしらんw

757 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 10:22:41.05 ID:Nd0ou12Q.net]
sizeof(配列)は動的でしょう

758 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:15:07.37 ID:7lezZ5hH.net]
sizeofは演算子だから動的じゃないかな
最適化で消し飛ぶ可能性はあるのかもしれんけど

759 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:42:52.96 ID:Gedrqwi7.net]
>>752
実装依存だと思うけど、p[-1]とかに長さが書いてあったりする

760 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:45:54.40 ID:xHFKV8QO.net]
アンカー長くなるから省略するけど
みなさんありがとう



761 名前:デフォルトの名無しさん [2019/03/12(火) 13:32:00.51 ID:6Uu2j9Xc.net]
インクリメントするときに困る

762 名前:752 mailto:sage [2019/03/12(火) 14:52:24.67 ID:u0RxZCyH.net]
VLAのこと完全に忘れてた sizeof(配列) は動的だわ

763 名前:はちみつ餃子 mailto:sage [2019/03/12(火) 15:09:12.69 ID:tBEUjULM.net]
sizeof の結果は動的な判断が必要な場合 (いわゆる VLA) を除いて整数定数であることは保証される。

C++ には VLA は無いので sizeof が動的であるかどうかを心配する必要はないんだけど、
それは置いといて、 C++ で配列の大きさを知りたいときは std::extent の方がよくない?

764 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 15:29:35.28 ID:xWv5Y9zk.net]
>>760

>>748-759
というアンカー表示方法も、知っておいてね。

765 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 22:48:56.35 ID:SU/8eF4+.net]
昔はstd::extent持ち出したりしたが今はstd::sizeだな

766 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:05:04.16 ID:/eUnUFro.net]
uint8_t *addrb =(uint8_t *)0x00F00000;
uint16_t *addrw =(uint16_t *)0x00F00000;
*addrb = 0x10;
*addrw = 0xF0F0;

0x00F00000番地に0x10と0xF0F0を書き込むコードらしいのですが、最初の2行がよく分かりません。アドレスが4バイトなのにポインタはそれより小さくて問題ないのでしょうか。右辺のキャストは何を行っているのでしょうか。
よろしくお願いします。

767 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:29:55.31 ID:RU0tEwI6.net]
>>766
・整数だから昇格するよ
・整数即値をポインタ型に変換してるよ
ポイント先のデータは多分、バイト型だよ

マップドIO系のCPUではよく見るパターンだね

768 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:37:26.58 ID:y5WX6T5u.net]
>ポインタはそれより小さくて問題ないのでしょうか。

*addrb = 0x10;
*addrw = 0xF0F0;
この文を見て上の疑問に到達したのかな?

ポインタは addrb や addrw で その変数の器の大きさはアドレスを格納できる大きさ

*addrb で アドレスにさされた先の内容を示す 内容の大きさはその型による

*addrb は uint8_t 型でおそらく1バイト (1オクテット)
*addrw は uint16_t 型でおそらく2バイト (2オクテット)

769 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 18:31:26.55 ID:yPp5BeL1.net]
ありがとうございます。
理解できました。
そもそもアドレス自身のサイズがあるものと勘違いしてました。

770 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 06:41:14.61 ID:SGfhnH0M.net]
アドレス自身にもサイズはあるけどね。
sizeof(*addrb) == たぶん 1 (8bit)
sizeof(*addrw) == たぶん 2 (16bit)
sizeof(addrb) ... 近頃のPCでは 4 (32bitアドレス) か 8 (64bitアドレス) かのう。



771 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 12:20:30.31 ID:Yw9IVRaM.net]
メモリ消費についてききたい。
8byteのa,b,cっていう変数と、それを結合した24byteのdっていう変数をクラス内で扱いたいんだけど、素直にやると48byteメモリ消費だよね?
代わりに24byteのdと、8byte型のポインタ(4byte)3つ宣言したら36byteのメモリ消費で12byte/オブジェクトの節約になると思うんだけど、最適化したければ意識するべき?
あるいはコンパイラがその辺は上手にやってくれて最小限のメモリ消費になる?

772 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 12:26:16.05 ID:1+g2CCuw.net]
>>771
ポインタ先をチェック・確保するのにヒープメモリーと計算コストが掛かる。

773 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 13:52:59.75 ID:M+miX7Aw.net]
>>771
宣言次第ですね。
メモリ節約だとdを配列にしておくといいかなとおもいました。

774 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 14:39:59.26 ID:3EvgP48J.net]
>>771
それ実体の24byteが別に要るだろ…

775 名前:デフォルトの名無しさん [2019/03/14(木) 14:43:45.46 ID:q8OuUl64.net]
下のソースをコンパイルしてコマンドプロンプト(cmd)で実行すると「鷗」の字が出力されません

int main(int ac, char **av){
setlocale(LC_ALL, "");
fwprintf(stdout, L"[%c]\n", 0x3042); // [あ] と表示される
fwprintf(stdout, L"[%c]\n", 0x9dd7); // [?] と表示される
return 0;
}

同じコマンドプロンプト(同じwindowsインスタンス上)で
python3 からだと(スクリプト経由でもIDEでもどちらも)
print(f'[{0x3042:c}]') # [あ]
print(f'[{0x9dd7:c}]') # [鷗]
表示されます

setlocale(LC_CTYPE, "en_US:utf8");
にしても同じでした

python3 からだと表示出来るということは
fwprintf に問題があるということでしょうか?

776 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 14:57:23.81 ID:tsxAqnNH.net]
Windows は、Visual Studio だろ

TCHAR マクロで、sjis/Unicode を切り替える。
Windows用の環境を揃えないと、無理だろ

777 名前:デフォルトの名無しさん [2019/03/14(木) 15:10:14.13 ID:q8OuUl64.net]
UNICODE
_UNICODE
とかは定義してあります
それに[あ]の方は表示されてるので
TCHAR が char と誤認識とかめっちゃ的外れな指摘だと感じます

778 名前:デフォルトの名無しさん [2019/03/14(木) 15:25:54.72 ID:s2YvJJWc.net]
fwprintf
ワイド文字を書き込む場合、ファイルはバイナリー・モードでオープンするか、
o_ccsid または codepage パラメーターでオープンする必要があります。
これにより、ワイド文字に対して変換が発生しないことが保証されます。

779 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 17:04:07.47 ID:DMc/T5SW.net]
>>771
もしかして windows で 24bitカラーを取り扱いたい話? union で楽する

#pragma pack(push,1)
typedef union {
BYTE e[3];
struct { BYTE B, G, R; };
} BPP24_t;
#pragma pack(pop)

780 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 19:02:32.98 ID:wP1B/x23.net]
>>772-774 >>779
ありがとう説明不足だった
厳密にはL2フレームを実装したくて
DMAC6byte
SMAC6byte
TYPE2byte
とかを結合して送りたい。
んだが、結合用の変数を用意するとメモリ消費二倍な気がしていやだなと。
で、それぞれはポインタにして結合用の変数の0、6、8byteめを指定してやればいい気がして聞いてみた



781 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 19:26:19.44 ID:lcdumzgu.net]
>>780
プロトコルスタックでそういうデザインはよくある
nicにわたすときのdmaもそんな感じ
しかしその数バイトの処理はこだわるところじゃない

782 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:21:10.72 ID:2vbDdJqi.net]
規格で標準ライブラリ中のメソッドがconst指定されていない場合これをconst指定するのは規格違反ですか?

具体的にはuniform_int_distributionのconstなインスタンスを生成してoperator()(URNG& g)を呼び出すとMSVC(VS2017)のみ通り、gcc4.3.2とclang4.0ではコンパイルエラーになりました

N4140及びN4659を参照した限り、上記のオペレータはconst指定されていませんでした

783 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:28:14.30 ID:gIuDI0vP.net]
>>780
フレームの組み立ては迷うことなくstructでいいと思うのですがどうでしょう。ちなみにpingではは素直にstructで組み立ててあります。

784 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:30:26.12 ID:V4l0GHvB.net]
>>781
確かに数バイトなんだけどね
>>783
cppで書いててクラスのプライベート変数として持ってます
結合どうするかだけ悩ましい

785 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 21:00:14.82 ID:gIuDI0vP.net]
>>784
ああ、なるほど。structでガワ作っておいて、ペイロード書き換えてバッファに溜めていくって感じでしかやった事しかないですけどケースバイケースなんでしょうね。

786 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 21:58:48.11 ID:VY0DZD81.net]
コンソールがSJISだから無理

787 名前:デフォルトの名無しさん [2019/03/14(木) 23:31:25.66 ID:u00Rfoqy.net]
C++難しすぎねえか?
こんなの新機能を網羅してる人どんだけいるんだか・・・

788 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 23:39:23.56 ID:CLlwPgIu.net]
奥義を究めると尊敬されます(カモ)

789 名前:はちみつ餃子 mailto:sage [2019/03/14(木) 23:47:20.81 ID:mXS2OKIJ.net]
>>787
別に網羅せんでも使えるところだけ使えば良い。
常に新しい機能を把握しておく必要はない。
使わない方が良い機能というのは有るので、駄目な部分を把握する方が大事だと思う。
(その結果として新しい機能に行きつくこともあるけど。)

新しい機能を使わないと回りくどくなるだけだが、
駄目な機能は致命傷になる (という可能性をコンパイル時にエラーに出来ない) こともあるので。

今の C++ で nullptr でなく NULL を使う理由は全然ない、みたいなのとか。

790 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 23:49:54.51 ID:Gk3KilXE.net]
てかコンセプトが待ち遠しい
templateの黒魔術っぷりが大幅に改善されるよね
エラーメッセージが分かりやすくなるのが大きい



791 名前:はちみつ餃子 mailto:sage [2019/03/15(金) 00:08:50.55 ID:q2a9nFaz.net]
コンセプトとモジュールは C++er の悲願って感じだからな……。
今まで土壇場での延期を繰返した経緯を考えると次も本当に入るのか
疑わしい気はするけど。

792 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 02:19:09.67 ID:f+LcC8HT.net]
配列のアドレスが表示できません。何が悪いのでしょうか。結果はからになります。
unsigned char a[100];
cout << hex << &a[5] << endl;

793 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 02:52:40.51 ID:nvk7uoI+.net]
a+5

794 名前:さまよえる蟻人間 mailto:age [2019/03/15(金) 04:49:34.55 ID:CgPhXsZt.net]
(void *)

795 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 06:53:21.47 ID:F3jqlZHF.net]
>>792
&a[5] は「unsigned char を指すポインタ」なので
cout << では「'\0'で終端する文字列」として表示しようとするのよ。
なもんで >>794 の通り void* にキャストして、
具体的なデータを指さない「単なるアドレス」扱いしてくれと指示。
ちなみに >>793 は効果ないでしょ。

でも C++ の作法としては static_cast<void*>(&a[5]) と
長々しい名前付きキャストを使うべきなんじゃろか。
個人的には static_cast<const void*>(&a[5]) まで書きたいけど。

inline const void *to_voidptr(const void* p) {return p;}
てな具合に、字数を減らすための変換用の関数でも使うか。


…何か標準的で短い書き方があったりするのかしら。

796 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 08:07:08.74 ID:fLDhqMRG.net]
文字はcharだけでsigned/unsignedは整数扱いするとかしてくれりゃよかったのにな。

797 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 09:38:53.54 ID:MV2geWC9.net]
coutなんて使うのが悪い
printf()でおk

798 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 10:50:58.56 ID:nvk7uoI+.net]
qDebugばっか使ってたからcoutの使い方なんて忘れてたわw

799 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 06:21:33.06 ID:Q6jWm6hE.net]
そういえば「cout << &a[5] でアドレス値が表示されない」ってのは
char 系の配列やポインタの場合だけで起きる特殊例なのかな。

ユーザーが operator<<(ostream&, T*) の再定義をしない標準の状態で、
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型って
標準か有名どころのライブラリで、何か知ってる?

800 名前:デフォルトの名無しさん [2019/03/17(日) 12:02:02.30 ID:ZVJiTVd1.net]
operator<<(ostream&, T*) の再定義をしないライブラリで
オブジェクトのアドレス値を送ったらアドレス値以外の何かが表示される型を定義しているものは?

という質問に置き換えてみた



801 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 13:17:40.49 ID:4LIjOkKH.net]
gccのiostreamのソース辿れば全部書いてあるよ。

802 名前: mailto:sage [2019/03/17(日) 14:11:06.99 ID:8PHb1ymW.net]
>>801
ほう、どこに書いているのかわかってそう言っているのですね、それはすごいですね

803 名前:デフォルトの名無しさん [2019/03/17(日) 14:22:23.04 ID:rD0zueCH.net]
https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/ostream

804 名前:はちみつ餃子 mailto:sage [2019/03/17(日) 14:50:03.46 ID:aA4z/LNt.net]
ライブラリのソースコードを辿っていくとビルトイン関数だったりして萎えることもあるので、
まずは仕様をちゃんと読もうな。

805 名前:795 mailto:sage [2019/03/17(日) 15:05:24.52 ID:Q6jWm6hE.net]
>>803
ostream のヘッダ単独は意外に分量少なくて一通り見られたよ。
char系以外には...

operator<<(nullptr_t); // #if __cplusplus >= 201703L で条件コンパイル
operator<<(__streambuf_type* __sb);

があるみたい。本当にこれだけか確実ではないけど。

nullptr_t の方は「nullptr が送り込まれたら "nullptr" と表示しろ」だと思うが
__streambuf_type* __sb は分からん(定義は別ファイル、みたいだし)。

806 名前:デフォルトの名無しさん [2019/03/17(日) 15:17:33.67 ID:9G7IgbIM.net]
痛レータが呼ばれるんじゃね

807 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 19:25:05.63 ID:wQNvtjPu.net]
現在アルゴリズムの勉強をしています
ソートアルゴリズムで有名な基本挿入法で与えた5つの整数を小さい順に並べるプログラムがうまく動きません
基本選択法、基本交換法(バブルソート)は書けるのですが…
ソートアルゴリズム、アルゴリズムそのものは図で正しく書けるとは思うのですが、コードに落とし込むのがうまくいきません
書いたコードは稚拙ですが以下のものです おかしな点を教えてくだされば幸いです

#include<stdio.h>
//基本挿入法
int main(void){
int temp=0,j,i;
int ary[5]={9,6,1,5,2};
for(i=1;i<=4;i++){
temp=ary[i];
for(j=i-1;j>=0;j--){
if(ary[j]>ary[i]){
puts("aaa");
ary[j+1]=ary[j];
}else{
puts("jais");
j--;
break;
}
}
j++;
ary[j]=temp;
printf("a[%d]は%d a[%d]は%d¥n",j,ary[j],i,ary[i]);
}
for(i=0;i<=4;i++){
printf("%d¥n",ary[i]);
}
return 0;
}

808 名前:デフォルトの名無しさん mailto:sage [2019/03/17(日) 19:26:08.56 ID:wQNvtjPu.net]
puts(“aaa”)やputs(“jais”)はprintf(“a[%d]は%d 〜”)の3つは、プリントデバグのために書いたものです…消し忘れました
すみません

809 名前: mailto:sage [2019/03/17(日) 21:48:00.62 ID:8PHb1ymW.net]
>>807
https://ideone.com/gIcJzp
納得がいくまで printf() を仕掛けるのはいいことだと思います。

810 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 21:33:07.89 ID:iIi946R+.net]
class C
{
public:
 void f(){}
};

C* pc= new C;

pc.f();

コンパイルエラーが出るってことは、コンパイラはpcがポインタであることを
知ってる

なのになぜ、->と記述させるの?



811 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 21:44:58.77 ID:32G7a9z6.net]
std::invoke使え

812 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 21:52:40.40 ID:7SOsx0TI.net]
ClassAのメンバにClassBがあってコンストラクタかsetterで外部から与えたいんだけど、
ClassBが大きくてできるだけコピーしたくない場合はどうするのがベストですか?
コピーコンストラクタが呼ばれた場合に初めてコピーされるようにしたいです
unique_ptr<ClassB>型にするとスコープを外れるときに落ちました
Class ClassA{
public:
 ClassA(ClassB &b) { m_b.reset(&b); };
 ClassA(const ClassA a) : m_b(new ClassB(a.m_b)){};
・・・
private:
unique_ptr<ClassB> m_b;

main(){
・・・
{
ClassB b;
ClassA a(b);
} // ここで落ちる
・・・
}

813 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:09:12.99 ID:oZ4uWA1m.net]
> m_b.reset(&b);

ヒープオブジェクトじゃないものをunique_ptrに突っ込んだらダメ。
カスタムデリータ用意するなら別だけど。

814 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:22:19.12 ID:7SOsx0TI.net]
>>813
この場合にスマートポインタは違うようですね
メンバは実体にして渡すときにムーブすればコピーは発生しないという認識は正しいですか?

815 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:30:43.95 ID:0T+gZcjq.net]
ClassAはClassBそのものを所有するのか
それとも外部のClassBへの参照を保持するだけなのか?
そのものを所有するなら外部から与えるのではなく
ClassAの中でClassBを構築するのも検討してみれば

// ClassAのコンストラクタ
// 11以降ならムーブとかも
ClassA(ClassBの構築に使う引数) : m_b(前記の引数) {}

816 名前:さまよえる蟻人間 mailto:sage [2019/04/01(月) 22:30:51.94 ID:OIWsA4Np.net]
>>814
スマホ使う前にオブジェクトの所有権を明確にせよ。

817 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:51:52.32 ID:7SOsx0TI.net]
ClassBの構築に使う引数も大きいためコピーを避けたいところです
基本的には参照を保持するだけにしたいところですが、ClassBがスコープを外れて破棄される場面ではClassAに実体をコピーできるようにしたいです

818 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 22:59:26.12 ID:oZ4uWA1m.net]
なんでそこでわざわざコピーしたいの?
最初からnewでヒープに確保すりゃコピー必要ないのに。

819 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 23:35:23.75 ID:32G7a9z6.net]
AにB*とunique_ptr<B>を作って
AがBを使うときは常にB*経由でアクセス
Bを所有させたいときだけunique_ptrにヒープ管理だけさせる

820 名前:デフォルトの名無しさん mailto:sage [2019/04/01(月) 23:37:44.29 ID:7SOsx0TI.net]
2つ持つという発想はありませんでした
試してみます



821 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 17:56:45.10 ID:4dlKQxP/.net]
昔、openGLを使ってC++出遊んでたんですけど、また最近触りたくなりました
皆さんC++で何作ってますか?
個人開発規模でお願いします

822 名前: mailto:sage [2019/04/04(木) 19:24:27.16 ID:+9gozOKQ.net]
>>821
昔作ったツールがひょんなことで役立っています…
あるディレクトリを別のドライブにコピーするだけのことなんですが、いや、まあ、Windows はなかなか御しがたく、path 文字列長が一定範囲を超過すると止まってしまう変てこなコマンドラインツールが未だに現役だったりするのです…
https://mevius.5ch.net/test/read.cgi/tech/1434079972/53

823 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 20:14:39.57 ID:vPLFSwkc.net]
>>822
システムコールってやつですか?
オブジェクト指向と並列処理を勉強したいと思ってるのでQtもいいかなと思ってます
どうでしょうか?

824 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 20:22:00.68 ID:USs/shwk.net]
Qtのデメリットはライセンスだけだから個人でやる分には良い選択

825 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 11:39:32.60 ID:K5RuTlhq.net]
オブジェクト指向を学ぶのにRubyあたりを使うのは
どういうデメリットが?

Pythonは「バージョン違いによる仕様変更」に
入門書レベルのコードが影響されるのであれば「良い選択とは言えない」ことになりそーだけど

826 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 12:37:54.42 ID:oOSdboOz.net]
>>825
せっかく新しい言語を学ぶなら、近い将来役に立たなくなる言語より他の役に立つ言語を選んだ方が合理的だと思う

827 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 13:47:38.12 ID:+CDO09PL.net]
pythonて破壊的な変更があったのは20年近く前なのに、未だに古い仕様で書かれた入門書が出回っているなら、オブジェクト指向学習に最適化どうかとは別に、問題な気が。

828 名前:デフォルトの名無しさん [2019/04/12(金) 14:05:10.56 ID:VR9mZ4dF.net]
rubyは古い言語

829 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 14:50:54.53 ID:K5RuTlhq.net]
Qt5.12.2はLGPLライセンスでインストールしとけばok?
他のライセンスは初見

830 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 14:56:36.82 ID:rTBxcnf6.net]
追加パッケージを使わないのならLGPLでおk



831 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 15:06:17.42 ID:K5RuTlhq.net]
"Qt Creator 4.8.2 CDB Debugg..." と "MinGW 7.3.0" 64-bit" 入れたら Hello World の窓が表示できるようになったけど、
練習ならそんなかんじでok?

832 名前:デフォルトの名無しさん [2019/04/12(金) 15:28:10.39 ID:VR9mZ4dF.net]
しばらく正常に動いてるように観えてても
あとで問題が顕在化して困るパターン

833 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 15:38:10.46 ID:K5RuTlhq.net]
どのような問題が発生しうるのでしょう?
もっぱら個人用の練習用とする予定

834 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 15:54:14.03 ID:rTBxcnf6.net]
Qt始めるならとりあえずこのシリーズ読もう
https://blog.qt.io/jp/category/getting-started-with-qt/

835 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 17:06:12.27 ID:K5RuTlhq.net]
私の場合は、インストール〜 "Hello World" については
https://qiita.com/yasumodev/items/399ec89b7205e3c0bab1
https://qiita.com/yasumodev/items/104446261114e9a7352c
を参考にしました。続きについては、御提示のリンク先を試してみますね

836 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 12:09:38.16 ID:r7SUy1hn.net]
ID:K5RuTlhq です

>>830
https://www3.sra.co.jp/qt/licence/index.html を見て『グラフ作成パッケージQt Charts入れておいた方が便利かも』と思い
いったんアンインストールしてみたのですが、

[Qt 5.12.2 のセットアップ] の画面で

Qt Charts
Qt Data Visualization
Qt purchasing
Qt Virtual Keyboard
Qt WebEngine
Qt Network Authrozation
Qt WebGL Streming Plugin

にチェックを入れたとしても LGPL が選べるようです
サードパーティーの追加パッケージで問題となりうる…?

837 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 12:11:50.81 ID:r7SUy1hn.net]
>>832
具体的に「どのような問題が顕在化」し「どのように困る」ことになるのでしょうか
クラスとメンバ関数のみの指摘でも構わないので、示していただけませんか?

また、その問題を回避する方法は何なのでしょうか?

838 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 13:57:08.11 ID:TvmgiEsJ.net]
>>836
LGPLを選べたとしてもQt Chartsを使っていればGPLv3
GPLと非互換のライセンスのライブラリを使うなら問題になる
だがそもそも練習段階ならライセンスなど気にせずどんどん書け

839 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 20:47:38.59 ID:r7SUy1hn.net]
昔は知らんが5.12.1ならQt ChartsはLGPLで許諾されるよ?

840 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 20:48:56.62 ID:r7SUy1hn.net]
5.12.2だった



841 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 23:19:58.42 ID:TvmgiEsJ.net]
はっきりとGPLv3と書かれてる
https://www.qt.io/download
Open Source->Additional features->Data visualization の?を参照

842 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:04:08.34 ID:El+pt49w.net]
条項はこれから確認する

>>841
インストールの操作手順からしたら
不意打ちも良いとこだなあ

Qt Charts をチェックした状態で[次へ(N)]ボタンを押したときに
「修正を受けたGPLv3」以外のラジオボタンが無効になってないと
UIとしておかしくねえか

あと「100%GPLv3と一致で修正条項なし」なん?
そうだとしたら、なおさらおかしい

843 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:07:28.45 ID:El+pt49w.net]
そういえば

LICENSE

などと大文字ファイル名にしないと効力が発生しないとする「糞判例がある」と聞いたことがあるけど、日本の裁判所?
ググっただけでは見つからなかった
最高裁判例なら検索結果の判決文をPDFで読める訳だがなあ

そのようなケースを敷衍すると、帰結として、Qt chartsはLGPLとなりうる
GPLv3 については逐条解説もあるから、そっちの内容も確認してみてちょ(あくまで「解説」)

844 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:54:57.43 ID:El+pt49w.net]
純粋に「Qt のライセンス」の話なのでスレチ?



copyright notice の表示方法の適切性について、GPLv3って基本的には明確には記載してなくね

ただし今回のケースだと、「インストーラが LGPL によるライセンスを表示した状態」で先に進める以上
0. Definitions. の第8パラグラフ(1) 反対解釈により、「GPLv3は適用されない」と読む余地がある
実際、GPLv3 につき "displays an appropriate copyright notice" してないもの

845 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:56:08.63 ID:El+pt49w.net]
書き込み制限受けたので続き。多分コレで終わり。

あのインストーラが表示している著作権表示は明確に LGPL だから適用条件満たしてないと解釈する余地がある、と
…わたしはただの学習者だから大騒ぎすることでもねえんだがねえ…

846 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 21:39:53.28 ID:L7qqGgg7.net]
int& a;
int &a;
どっちにすべきでしょうか

847 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 21:52:39.66 ID:zTAvdEPs.net]
好きな方で書け

848 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 21:56:00.71 ID:dimPC8Ge.net]
「すべき」というのは規格表での『shall』のことですか?
それとももっと別の意図がありますか?

849 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 22:02:16.06 ID:1nT5zSFt.net]
int & a;
int * b;

850 名前:はちみつ餃子 mailto:sage [2019/04/15(月) 23:26:36.86 ID:94OTneyx.net]
std::add_lvalue_reference<int>::type a;



851 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 07:00:13.97 ID:xjyBK9QH.net]
そんなこと気にする前に参照の変数を未初期化で使おうとするなよ。
みたいなツッコミを入れたくなるけど、コンパイル時にエラーが出る
間違いは必ず見落としなく直せるから実際は大きな問題じゃないよね。

「ポインタ宣言の * を型名に寄せるか変数名に寄せるか」と同じで
一貫した書き方をするかぎり、どっちでも構わんでしょ。
個人的には「変数名に寄せる」派だけど。

852 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:18:02.67 ID:hl7GJiol.net]
int& a, &b;
int &a, &b;
自分も後者の方がいい

853 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:20:49.86 ID:GDkTCt4E.net]
>>851
> 未初期化で使

コレの解釈は揺れそうだが、たとえば

int *i;

とか、
int *i;
int j;
i = &j;

とかいうかんじのことかしらん

854 名前:デフォルトの名無しさん [2019/04/16(火) 11:22:25.45 ID:vZl8q5zB.net]
>>852
+1
ほんそれ

855 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 12:24:17.44 ID:uqcfe1Iw.net]
わからない事をここで質問しようとレスを書いてる最中に「わかった!」
ってなることが多々あるんだが、この謎の現象は何なんだ・・・

856 名前:デフォルトの名無しさん [2019/04/16(火) 12:28:15.56 ID:4RjIOnLA.net]
自己解決パターン

質問するときに頭の中が整理される→解決
質問するために再現する必要最小限のコードを書く→問題の切り分けが出来る→解決

いろいろあるが

857 名前:はちみつ餃子 mailto:sage [2019/04/16(火) 13:21:34.50 ID:XnNfa6Fy.net]
>>855
何が駄目なのかわかれば解決法は自明であることが多い。
逆に言えば、解決法がわからないときは問題が何であるかわかってなかったりするんだよ。
だから、きちんとした形に質問をまとめれたなら、それはもうほとんど解答でもあるんだ。

この手法を利用してバグを取り除くやり方としてラバーダックデバッギングというものが知られている。

858 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 13:51:09.84 ID:WfxisTJA.net]
C++erならRust学べって風潮嫌い
なんで学習コストがある言語を2つも学ばないといけないのかと思うし

859 名前:847 [2019/04/16(火) 17:31:42.92 ID:xjyBK9QH.net]
>>853
あんまり大それた意見とではなくて
void func()
{
 int &a;
...
}
と宣言したら、参照先不明の &a を作ろうとしてるから
必ずコンパイルエラーになるじゃろ、程度の指摘。

…ただ、この投稿を書こうとして気がついたんだけど、
class samp {
 int &a;
...
};
てな具合に、クラスのメンバとしての宣言ならエラーにならないね。
ちゃんとコンストラクタで a に参照先を与えるなら許される。


要するに >>851 の前半部分は間違ってた、ということ。
正しい場合もあるけど、常に正しいわけじゃない。

860 名前:デフォルトの名無しさん [2019/04/16(火) 17:55:46.56 ID:LqBdGBd1.net]
その場合でもコンストラクタで初期化してなかったらエラー出るんだから
説明自体は間違ってない



861 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 21:38:13.69 ID:5Rly8M3u.net]
>>857
テディベアをおいておくというエピソードなら有名だね

862 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 22:14:36.94 ID:dFuxCqAG.net]
>>858
難しいことも違った方向から見るとわかりやすくなることもある。

863 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 11:24:45.99 ID:qKKG75KJ.net]
質問です。
cinの戻り値のistream&がなんでif(cin)みたいに真偽判定に使えるのかが発端です。
https://stackoverflow.com/questions/8117566/why-istream-object-can-be-used-as-a-bool-expression
こことか見たんですけど、
1.istreamはbasic_iosを継承してて、
2.basic_iosで型変換演算子explicit operator bool() const;が定義されてる
ってとこまでは理解しました

ここからが質問なんですけどこの型変換ってのは勝手に行われるもんなんですかね
if(something)って書いたらif(bool(something))っていつもやってるんでしょうか

864 名前:デフォルトの名無しさん [2019/04/19(金) 11:40:22.57 ID:ymX8VCBl.net]
intで参照したらEOF

865 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 12:05:08.07 ID:r9r2BfdP.net]
型変換以前に0やnullポインタを評価するとfalse、0以外の値はtrueと評価されると決まっているからだろ。
あと暗黙の型変換はよく起こる。

866 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 12:08:35.86 ID:lgg24wim.net]
if 文の条件判定部は bool 型を要求してる前提で解釈,翻訳してるんじゃない

867 名前:はちみつ餃子 mailto:sage [2019/04/19(金) 12:13:29.89 ID:mypEidUJ.net]
>>863
yes.
条件部はブールを要求し、もしブールでない場合は常に型変換する。

868 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 09:49:03.76 ID:9bTTnEnG.net]
前橋和弥さんのC言語ポインタ完全制覇という本で、
PCの環境(CPUの種類など)によってデータのメモリ上の配置は異なる
(構造体のパディングをはじめ、ただの単体のintでさえバイトオーダーが異なる(ワークステーションではビッグエンディアン採用だったりする))
ので、メモリの内容をバイナリでディスク上のファイルに出力したデータは別環境で読み込んで使おうと思ってはいけない
というような事が書いてありましたが、この話はWindows以外の環境や古い環境を前提とした話なのでしょうか?
同書にWindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてあるので、
Windows環境ならゲームのセーブデータとしてクラスをまるごとfwriteでバイナリ出力したファイルを別PCでロードしても問題ないのでしょうか?
(Xeonとかワークステーションマザーとか関係なしに、IntelCPU&Windowsの環境ならばリトルエンディアンで統一されている?)
(Macではビッグエンディアンになるが、Windows環境のみ対応のゲームを作る上では無視してよい?)
という認識は間違っているでしょうか?
パディングの違いなどもWindowsやVisualStudioが自動で良きに計らってくれるのならありがたいのですが…

869 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 09:54:32.44 ID:gSzU4BUh.net]
windows間だから「別環境」ではなく「同じ環境」
だからwindowsでも同じ
そのbmpデータをmacに持って行っても使えない

なので磁気コアをダンプして永続化したようなデータは、他の全ての環境で使えない
60年代くらいから知られている

870 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 12:00:13.06 ID:9bTTnEnG.net]
>>869
Windows環境であれば、別PC(別ハード)でも同環境とみなして良いのですね

>>WindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてある
読み直したら、違ってましたm(_ _)m
可変長構造体の節で、
WindowsではBMPをfwriteなどで可変長構造体まるごとダンプしていて、
BMPのような他の環境にもっていく可能性が高いファイルを構造体まるごとダンプしているのがWindowsらしい
というような内容でした

Windows級の一流プログラマーでも構造体まるごと出力を使っているのであれば、
ゲームのセーブデータで構造体やクラスをまるごとバイナリ出力しても問題ないととらえてよいのかな?



871 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 12:30:10.75 ID:4KhiFNHT.net]
>>870
bmpファイルには仕様があるので「Windowsのプログラマがどうたら」なんぞ関係無く仕様に従って読み書きすべし
(現実には仕様に従わない入出力をやらかすアプリ毎に対処することはあるが)

自分で定義した構造体でも外部に公開するなら仕様を決めそれに準ずるべし
公開しないならそれこそ構造体丸ごとダンプなり好きにすれば良い
実際にそういう実装は珍しいものじゃない
どうせ環境の変化で困るとしてもそれは自分だけだからね






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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