X



【初心者歓迎】C/C++室 Ver.106【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0002デフォルトの名無しさん
垢版 |
2020/07/13(月) 13:53:44.41ID:WBkWHxcT
C言語を256倍使うための本
ttps://www.%61mazon.co.jp/dp/4756100430
詳説 C++ 第2版
ttps://www.%61mazon.co.jp/dp/479732743X
0007デフォルトの名無しさん
垢版 |
2020/07/13(月) 16:28:13.78ID:srh9sya6
メンバに自クラスの配列を持つクラスのメンバ配列の初期化はc++ではどうやりますか?Javaでは下のように出来てます。

☆Javaでこうなっています
class A {
protected A[] node = new A[3];
}

☆c++でこうしたらエラーになりました。
@a.hpp
class A {
public:
static A node[];
};

@a.cpp
#include "a.hpp"
A A::node[] = new A[3];

ちなみに型Aを適当にintとかにしたらc++の方もいけました。
0008デフォルトの名無しさん
垢版 |
2020/07/13(月) 16:38:40.16ID:ny9O75E1
>>7
nodeは静的メンバ変数でいいの?
java同様、staticはすべてのクラスインスタンスで共通の変数って意味だけど。
0009デフォルトの名無しさん
垢版 |
2020/07/13(月) 16:41:24.41ID:srh9sya6
>>8
ダメだとは思ってましたが、つけないと不完全な型名は使用できませんと怒られました。
c++ではメンバに自クラスの変数がいるとダメなのですか?
0010デフォルトの名無しさん
垢版 |
2020/07/13(月) 17:07:02.67ID:WBkWHxcT
うまくいく例
class A {
public:
static A *node;
};

A *A::node = new A[3];
0013デフォルトの名無しさん
垢版 |
2020/07/13(月) 17:30:23.80ID:KVdg44rD
>>9
> c++ではメンバに自クラスの変数がいるとダメなのですか?
そりゃだめだよ、もしそんなのができたら
class A {
A a;
int b;
};
A x;
とした時に x.b; x.a.b; x.a.a.b; ... みたいに無限に int b; を作る羽目になるから。
Javaなどは
class A {
A *a;
int b;
};
みたいなのしかできないから問題ないだけ。
0014デフォルトの名無しさん
垢版 |
2020/07/13(月) 17:33:49.37ID:17o/9bhC
C++のクラス変数とJavaのクラス変数の違い、だっけ。
端的に「C++ではnewなしにクラス変数を宣言して使える」ようにするため。

Javaと対比しながら説明する能力がないんで中途半端で悪いけど。
001514
垢版 |
2020/07/13(月) 19:29:02.10ID:17o/9bhC
× 変数を宣言
○ 変数を定義

中途半端な上に間違っててすまぬ。
あまつさえ細かい訂正のために貴重な投稿枠の浪費までも。
0016デフォルトの名無しさん
垢版 |
2020/07/14(火) 08:27:52.03ID:bhhAeN2N
>>14
クラス変数の問題ではなく、クラスのメンバとして配列を宣言した場合にC++では配列の実体をメンバとして持つのに対し、Javaでは配列の実体は別のところに作られて参照だけを持つというところでないの?
0018デフォルトの名無しさん
垢版 |
2020/07/14(火) 09:28:38.75ID:PHX4w74f
>>16
配列は関係ない
C++はクラス型のクラス変数を定義すると実体を持つから自分自身を定義できないってだけ
JavaやC#は実体じゃなくてポインタを持つだけだから問題ないってこと
0019デフォルトの名無しさん
垢版 |
2020/07/14(火) 12:52:08.42ID:Mma3I+br
C/C++ はヌルポを敢えて使う
0023デフォルトの名無しさん
垢版 |
2020/07/15(水) 12:07:21.21ID:cL9c5hZ8
enum {hoge, fuga, hage};

hoge==0
fuga==1
hage==2
として使えるとして
0,1,2とかの数字から実行時にhoge,fuga,hageの名前を知りたい時って
何か便利なインターフェースありますか?
みんな毎回線形探索のコード描くみたいにやってる?
0024デフォルトの名無しさん
垢版 |
2020/07/15(水) 12:39:32.75ID:fkxllX2L
>>23
連番なら配列に入れときゃいい
番号飛んでいて…
・件数少ないなら線形サーチ
・件数多いならハッシュとかバイナリサーチとか
0026デフォルトの名無しさん
垢版 |
2020/07/15(水) 13:02:12.66ID:cL9c5hZ8
連番じゃないときとか
結構でかい番号だったりするときは困りますね
0027デフォルトの名無しさん
垢版 |
2020/07/15(水) 13:08:43.15ID:ONqo+DKP
##演算子でどうにかなるんじゃね
0028デフォルトの名無しさん
垢版 |
2020/07/15(水) 13:14:49.36ID:jM1x+GOc
IT掲示板群 ttp://x0000.net/forum.aspx?id=15

学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン(画像有り)
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0

☆ VMを書いた(C#) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
0029デフォルトの名無しさん
垢版 |
2020/07/15(水) 13:38:14.90ID:cL9c5hZ8
線形探索するにしても enum 用に foreach もあるのかなと思ったのですが
http://sanichi999.hateblo.jp/entry/2014/12/19/011820
こんな感じですね
名前とか同じことを何度も書いてる気がしてしまうのと
割と定型な気がするのでコンパイラが提供してくれてないかなと思ったで質問しました
0030はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/07/15(水) 15:30:19.58ID:hr2ndtrb
実行時に列挙定数の名前の文字列が欲しいことがそんなにあるかな?
デバッグプリント用途くらいしか思いつかんのだけど。
0031デフォルトの名無しさん
垢版 |
2020/07/15(水) 16:14:13.34ID:LgiIyt9Z
vector<int> a = {8, 1, 9, 5, 7, 3};
があるときに例えば
vector<int> b = a{0, 2, 5};
とかしたら
b が {8, 9, 3} の配列みたいになってくれる書き方ってありますか?
0037はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/07/16(木) 13:49:08.52ID:MICl0UeU
>>36
エラーメッセージを見ればわかるやろ。
T はパラーメーターパックであって、展開せずに使うということはできへんのや……。
0039デフォルトの名無しさん
垢版 |
2020/07/17(金) 13:55:06.86ID:xXsIieN6
テンプレートが型付マクロにしかみえません
眼科に行った方が良いですか?
0041デフォルトの名無しさん
垢版 |
2020/07/17(金) 17:27:51.73ID:LIcKojh8
マクロといってのcのマクロではなくlispのマクロ的な機能
まあコンパイル時の制限はあるけど
0042デフォルトの名無しさん
垢版 |
2020/07/18(土) 01:05:56.87ID:vSXqjqjP
Win32APIでコンボボックスの値をオーナードローしているんですが、wchar_tで項目追加すると文字の描画ができるんですが、
c_str()だと文字化けします。何故ですか?

・WM_INITDIALOG
 文字化けしないケース
  const wchar_t *a = L"あいうえお";
  SendMessage(hForeColor, CB_ADDSTRING, 0, LPARAM(a));

 文字化けするケース
  std::wstring b = L"あいうえお";
  SendMessage(hForeColor, CB_ADDSTRING, 0, LPARAM(b.c_str()));

・WM_DRAWITEM
 DrawText(lpDraw->hDC, (wchar_t*)lpDraw->itemData, -1, &r2, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
0044デフォルトの名無しさん
垢版 |
2020/07/18(土) 02:35:10.07ID:IdAxqtyn
オーナードローの時、CBS_HASSTRINGSスタイル指定しないと、そんな感じになるっぽいね
CB_ADDSTRINGメッセージに書いてあるね
0045デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:25:54.56ID:94poIsAY
1つの言語をある程度やりこまないと能力値がリセットされますか?
0046デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:38:50.50ID:uRU3MGLx
理解する能力と
使いこなす能力と
創造する能力は
全部別
0047デフォルトの名無しさん
垢版 |
2020/07/18(土) 15:42:57.82ID:94poIsAY
理解力のことです
ごめんなさい
0048デフォルトの名無しさん
垢版 |
2020/07/18(土) 15:58:14.32ID:qVma+RcU
リセットはされない。
複数言語を学ぶときは並行にやって混乱するか順番にやって混乱するかのどちらか。
自分に向いた方を選べ。
0049デフォルトの名無しさん
垢版 |
2020/07/18(土) 16:14:37.72ID:C0jdHcgs
ある程度やりこまなければある程度落ちるのは常識
ある程度やりこめばある程度上がるのも常識
0050デフォルトの名無しさん
垢版 |
2020/07/18(土) 17:22:27.13ID:Bt+NBO6d
>>45
リセットされたのではなく、自分が理解できていたと思い込んでいただけで実際の理解がその程度だったということに気づかされただけだと思うぞ。
0051デフォルトの名無しさん
垢版 |
2020/07/18(土) 18:01:57.62ID:51enBbxV
あるある
0052デフォルトの名無しさん
垢版 |
2020/07/18(土) 18:20:51.79ID:sJrDCvPM
fopenでccs=utf-8を指定して改行コードのCRLFをfputwsで書き込んだら
CRCRLFになったんですけど。バグですか?
0053デフォルトの名無しさん
垢版 |
2020/07/18(土) 18:38:01.13ID:yqiH8/gB
appendで開いてたり
0054蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/18(土) 18:39:23.19ID:5h3AvQ+O
>>52
WindowsではLFがCR LFに変換されるので、仕様ですよ。
CRを出力しないか、バイナリファイルとして出力して下さい。
0056デフォルトの名無しさん
垢版 |
2020/07/18(土) 19:10:12.51ID:tp8HW1uL
バイナリじゃなく、テキスト処理してる場合は、
各OS のAPI を使った時に、

Windows なら、CRLF になって、
Linux なら、LF になるのだろう

Ruby でもそう。
Windows にインストールしたものは、CRLF になって、
Linux にインストールしたものは、LF になる
006056
垢版 |
2020/07/18(土) 19:57:14.80ID:tp8HW1uL
Global New Line みたいな指定もある。
\n が、OS によって自動的に切り替わるもの

Windows なら、CRLF になって、
Linux なら、LF になる
0061デフォルトの名無しさん
垢版 |
2020/07/19(日) 06:39:45.80ID:wsDBDsuq
\nはコンパイラが読み込んだ時点でLFに変換される
そうでないと、'\n'みたいな文字を読み込んだ時に
保存に2バイト必要になってしまう
0062デフォルトの名無しさん
垢版 |
2020/07/21(火) 11:50:35.81ID:IJfaFmgd
C++のenumの仕様について質問させてください

enum Aとenum Bが定義されていた時、
void func(enum A);
void func(enum B);
のようにオーバーロードできるでしょうか。
0063デフォルトの名無しさん
垢版 |
2020/07/21(火) 11:58:59.44ID:+OCbOnRh
enum class
0068デフォルトの名無しさん
垢版 |
2020/07/31(金) 02:13:31.68ID:zHNUGG0v
最近C++勉強し始めて疑問に思ったので教えて下さい
std::vector<int>vec;
auto result = std::find(vec.begin(), vec.end(),3);

上記のようにvectorを宣言だけで初期化せずにfind関数内でbegin()、end()を使用しても例外が発生しません
これは範囲外の要素にアクセスしているわけじゃないという理解でよろしいでしょうか
0069デフォルトの名無しさん
垢版 |
2020/07/31(金) 02:35:13.36ID:E2vmFTLm
そうだね
というか最初はbegin=endだから、findで一度もループ処理が発生しないだけ
0070デフォルトの名無しさん
垢版 |
2020/07/31(金) 08:38:17.94ID:UG/y1RVK
>>68
自分で明示的に初期化していないだけで、vectorの変数を宣言しただけで勝手に(サイズが0のvectorとして)初期化してくれる。
vectorのコンストラクタがそれをやってくれている。
0072デフォルトの名無しさん
垢版 |
2020/07/31(金) 11:04:11.23ID:N0eufbNj
#include <vector>
#include <algorithm>
#include <iostream>

int main() {
std::vector<int>vec;
vec.reserve(10);
auto result = std::find(vec.begin(), vec.end(),3);
std::vector<int>vec2;
vec2.resize(10);
auto result2 = std::find(vec2.begin(), vec2.end(),3);
return 0;
}
0076デフォルトの名無しさん
垢版 |
2020/08/05(水) 08:45:38.77ID:FS19WAoY
下火っていうか
調理場にあるラップのようなもので特に意識されることはないけど欠かすことのできないもの
でもラップを使った料理っていうとどうしてもお手軽感がぬぐえない
プロの調理師はこういうものはできるだけ人目につかないようにする
0080デフォルトの名無しさん
垢版 |
2020/08/06(木) 11:01:09.05ID:6QU45l4b
boostじゃなくても同じことが出来るものがあったら後者を選ぶな
なんでだろ自分でもわからんω
0081デフォルトの名無しさん
垢版 |
2020/08/06(木) 11:13:25.84ID:YI93igBY
いまならasioなどのために使うのでは。
そしてネットワーキングTSが標準に入ると、また使わなくなる。
そういうサイクルがあるのでは。
0085デフォルトの名無しさん
垢版 |
2020/08/08(土) 10:09:00.08ID:noFfmCPy
>>82
TCHARはオワコン
全く不要
0092デフォルトの名無しさん
垢版 |
2020/08/08(土) 16:39:57.58ID:/RuHG5bH
C++11の前はboostめっちゃ使ってました
0093デフォルトの名無しさん
垢版 |
2020/08/08(土) 16:52:58.78ID:OT1M6D83
Debianがgcc8なのでfilesystemをboostのほう使うとか。
互換性が動機という場合もありますね。
0094デフォルトの名無しさん
垢版 |
2020/08/08(土) 19:24:55.75ID:Sbg9T/ud
C++ の仕様に関する質問です。

OpenGL では、

typedef unsigned char GLboolean;
#define GL_FALSE 0
#define GL_TRUE 1
void glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized,
             GLsizei stride, const void *pointer);
となっていますが、
  glVertexAttribPointer(locAttr, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0);
と書いた場合、第四引数の GL_FALSE は 0 なので、int 型の整数リテラル(32BIT)ですが、対応する仮引数は、
GLboolean 型(8BIT)となっています。

overload resolution で、best matching アルゴリズムで最適な関数を探す際、対象の関数のプロトタイプ宣言の仮引数の型と
実引数の型を比較して、1つでも型が不適格のものが見つかった場合、「viable function」ではないとみなされ、候補から除外されます。

例として、unsigned char 型の仮引数に、int 型の変数を渡そうとすれば、不適格に成り、その関数は対象から除外されます。

しかし、この場合の様に、0 や 1 という整定値ならどうなるでしょうか。つまり、
unsigend char 型の仮引数に int 型の整数であるところの 0 という整数リテラルが、「適合」するというのは、
正しい仕様でしょうか?
0095デフォルトの名無しさん
垢版 |
2020/08/08(土) 20:40:58.31ID:jGasFcRb
その関数はCの関数なので、そもそもマンぐり返されてないし、より適合するオーバーロード関数の存在なんて考慮してないんじゃね?
0096デフォルトの名無しさん
垢版 |
2020/08/08(土) 21:31:49.81ID:Sl6pvmJG
>>94
> unsigned char 型の仮引数に、int 型の変数を渡そうとすれば、不適格に成り、その関数は対象から除外されます。

これが誤解なのでは?
暗黙変換されるでしょ。
0097デフォルトの名無しさん
垢版 |
2020/08/09(日) 00:18:25.48ID:5wTPapRC
>>96
確認しました。charの仮引数の場所に、int 変数を実引数にして渡しても、
エラーも警告も出ませんでした。
関数呼び出しだけでなく、
int i = 0x123456;
char c = i;
としてもエラーも警告も出ませんでした。
テストは、VS2019のC++で行いました。
0098はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/08/09(日) 00:32:08.26ID:ayHdPpdd
整数型同士はどの組み合わせでも暗黙の型変換はされるんじゃね。
変換後の型が符号付きかつ、変換後の型が表現できる範囲に収まらない値だったときの挙動が未定義ではあるので、
狭い方向への変換のときに警告くらいは出してくれることもあるみたいだが、
オーバーロードの解決の際に排除されることはない。
0099デフォルトの名無しさん
垢版 |
2020/08/09(日) 12:09:42.16ID:5wTPapRC
>>98
ついでに、お聞きしたいのですが、
class CBase {・・・};
class CDerived : public CBase {・・・};
の場合、
CDerive* ---> CBase*
への変換は標準変換は有りますが、
CBase* ---> CDerive*
への変換は標準変換は有りませんよね。
しかし、
CBase *pBase;
に対して、
(CDerived*)pBase
というcastは、down castであり、気をつけなければならないキャストではありますが、組み込みのcastとして、
どのコンパイラでもサポートしています。
(この場合、型の解釈の変更だけでなく、マシン語レベルでの生の値も、offset分だけ変更になることがあるのは
周知の通りです。)
ということは、標準変換ではないにも関わらず、キャストではなぜかサポートしていると言うことになるのでしょうか?
0100デフォルトの名無しさん
垢版 |
2020/08/09(日) 12:11:08.88ID:q7SdW+2C
>>97
viable function とか言うから規格上の確認がしたいのかと思ってたけど、そこは実験でいいのか。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況