C++相談室 part159

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2022/02/19(土) 11:56:42.14ID:kSnJ/KwP
前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/
2022/03/16(水) 16:43:46.25ID:IF2KaGKL
>>531
https://gammalab.net/blog/3rgve9rdw2kt5/
2022/03/16(水) 17:21:01.73ID:dC1HWmI+
defaultって単語が熱いなぁ
2022/03/16(水) 17:26:44.65ID:sZ1wd+Ly
ロシア国債?
2022/03/16(水) 17:43:54.03ID:AUMfJKJU
ルーブルをreturnするから問題ない
2022/03/16(水) 17:44:36.81ID:dC1HWmI+
C++11で正式採用されて11年経つというのに関数のdefault宣言を一度も使ったことがないわ
2022/03/16(水) 17:47:40.89ID:lLYtmIck
ええ…
2022/03/16(水) 17:49:13.58ID:dC1HWmI+
>>535
迷惑度でいうとreturnというより例外クラスをthrowする感じに近いですね
2022/03/16(水) 17:51:06.34ID:sZ1wd+Ly
>>536
= default; より
{} のほうが短いってこと?
2022/03/16(水) 17:54:01.36ID:dC1HWmI+
短いとは?
2022/03/16(水) 17:56:55.95ID:sZ1wd+Ly
ソースコードの文字数
2022/03/16(水) 19:05:34.58ID:gvdy2Zu4
bool oprator==(const ThisClass&)const = default;
は便利だぞ
2022/03/16(水) 19:32:49.28ID:YdzJshEX
{}の定義はtrivial判定にならないからなあ
2022/03/16(水) 20:15:30.86ID:dC1HWmI+
関数のdefault宣言を今まで一度も使ったこと人、正直に手を挙げなさい
2022/03/16(水) 20:54:55.18ID:J1wyaesr
2022/03/16(水) 22:03:43.15ID:LiWeOEyq
そもそもdefault宣言がわからない
何?
2022/03/16(水) 22:17:44.96ID:jNwWVkZm
struct C{
C();
C(const C&);
C(C&&);
C& operator=(const C&);
C& operator=(C&&);
~C();
// fields
int i;
std::string s;
};

class/structのうちコンストラクタとかの特殊関数を「何も考えずに実装したらこうなるよね」ってのを明示的に宣言する。

上のstructに初期化用の C(int, std::string); も追加するけど元のコンストラクタもそのまま使いたいときとか C()=default; を書いておく。
548デフォルトの名無しさん
垢版 |
2022/03/16(水) 22:32:26.86ID:aL91bHGW
じゃあ便乗して

>>547
&&の意味を教えてください
const &の代わりになるんですか?
2022/03/16(水) 22:40:15.82ID:J1wyaesr
>>547
あーなるほど
便利かもな
2022/03/16(水) 23:08:39.16ID:jNwWVkZm
>>548
T&&は右辺値参照
C++11で導入された「もう使わない値」を使いわますための仕組み

わかりやすい例だと
std::vector<int> mk10000(){
// 10000要素のvectorを適当に作って返す
}

struct C{
using ivec=std::vector<int>;
ivec _v;
C(const ivec&v): _v(v){}
C(ivec&&v): _v(std::move(v)){}
};

int main(){
C c(mk10000());
}

const T&のやつしかないと、vectorが持ってる10000要素を全部コピーするしかないが、
(その直後にもう使わないコピー元を破棄しなきゃいけない)
T&&のやつがあるとvectorが内部で持ってるポインタを差し替えるだけで済む。
2022/03/16(水) 23:19:48.63ID:0TydPa2f
それだけじゃ誤解しか生まないw
https://cpprefjp.github.io/lang/cpp11/rvalue_ref_and_move_semantics.html
2022/03/16(水) 23:26:37.67ID:Jym8C6W+
昔はswap咬ましてたヤツだな
2022/03/17(木) 00:06:29.74ID:duMzaOgi
shared_ptr使えばいいじゃない
2022/03/17(木) 00:35:48.54ID:Oo+Bui2i
メモリポインタの差し替えか
555デフォルトの名無しさん
垢版 |
2022/03/17(木) 00:43:42.18ID:DrTp92yO
>>550
>>551
ありがとうございます

普通の変数
左辺値参照
右辺値参照
ポインタ
ポインタのポインタ
etc...

うーんC++は頭が痛くなりそうですね
2022/03/17(木) 01:50:00.57ID:jsnVHM5N
>>544
(´・ω・`)の
2022/03/17(木) 01:50:25.35ID:faeKJv0z
そんなことくらいで頭が痛くなるなら、むしろやめとけw
2022/03/17(木) 03:32:17.05ID:kCjHZQsl
昨今のコード書かない言語オタクのオナニー拡張はスルーしてよい。
2022/03/17(木) 13:38:21.60ID:faeKJv0z
そのまま動かない部分コードだけ書くバカを除いたら、大抵のスレは多分俺しかコード書いてないけどねw
2022/03/17(木) 13:52:55.92ID:86Z8hvJ4
ム板で「俺はコード書いてるぞ、どうだ偉いだろうエッヘン」
これ寒すぎるんだけど・・・
2022/03/17(木) 14:50:03.04ID:zTqRydhk
ム板だからこそコード書く奴は偉いと思うぞ
ただ実際に書いてる奴はいちいちそんなことを自慢気に書いたりしないけどなw
2022/03/17(木) 14:53:55.54ID:86Z8hvJ4
偉いのか? やっと一人前の板民というだけだろ
コード書かないやつがム板ではアウェーなだけで
そこから相対的に見て偉いと言うことにどんな意味があるんだ
2022/03/17(木) 15:07:05.49ID:zTqRydhk
>>562
> コード書かないやつがム板ではアウェーなだけで
お前は自分がアウェーという意識を持つべき
2022/03/17(木) 15:22:32.44ID:86Z8hvJ4
>>563
そこで喧嘩腰かよ

実際に書いてる奴はいちいちそんなことを自慢気に書いたりしないと言ったばかりの
舌の根も乾かぬうちにそれか

頭冷やせ、話はそれからだ
2022/03/17(木) 15:33:03.66ID:faeKJv0z
>>564
コラコラお前は煽るなw
俺は>>558に俺のことスルーできなくなっちゃうけどいいの?って言っただけだよ
やれマウントだやれドヤ顔だとか、ホームとかアウェーとか、その手の話しはじめちゃうやつはちょっと発想がやばいって
あと承認欲求なんていくら高くてもクソの役にも立たんぞw
2022/03/17(木) 15:37:19.10ID:kCjHZQsl
なにケンカしてるん? おまえら仲良くしろよな^^
2022/03/17(木) 15:39:26.58ID:86Z8hvJ4
>>565
何が? 俺煽ってないよ
唯一、批判めいたことを言ったのは560だけ

例えばだが562に青筋立てるようなら
俺はコード書きませんと自己申告しているようなものだぞ
2022/03/17(木) 16:00:27.96ID:kKKT9czh
>>562みたいなことを書く奴に喧嘩腰とか言われてもなぁw
ちょっと頭冷やした方が良くね?
2022/03/17(木) 16:03:43.13ID:86Z8hvJ4
>>568
あれ? 否定しないのか
だったら話にならないな
2022/03/17(木) 16:15:46.57ID:0FIEYVVj
何を否定してほしいんだろ…
相当頭に血が上ってそうw
2022/03/17(木) 16:58:36.33ID:7ByY4YCs
そんなことよりC++の話しようよ
2022/03/17(木) 21:12:52.60ID:duMzaOgi
日本のトレンド
ちんこ勝負
トレンドトピック: 正式決定

ツイッターの形態素解析エンジンやばくないですか
2022/03/17(木) 21:16:07.60ID:VOoj+XQs
OSSの拾いもん回してるだけだろ
574デフォルトの名無しさん
垢版 |
2022/03/19(土) 19:36:28.58ID:0pH7TqjX
std::vector::atの定義がこうなってるんですけど

reference at(size_type n);
const_reference at(size_type n) const;

これはエラーにならないんですか?
戻り値の型だけが違う場合オーバーロードはできないと勉強したんですけど
2022/03/19(土) 19:45:40.38ID:jBXtN76z
戻り型だけの違いやないやん
thisの違いは仮引数の違いやで
576デフォルトの名無しさん
垢版 |
2022/03/19(土) 19:48:56.32ID:0pH7TqjX
あ、なるほど
ありがとうございます!

あと2つが呼ばれるときの違いもわからないのでそちらも教えていただきたいです
2022/03/19(土) 20:15:27.83ID:Cc07y5v9
少なくともconstオブジェクトからはconstメンバ関数しか呼べないね
2022/03/19(土) 20:28:47.85ID:Cc07y5v9
http://www7b.biglobe.ne.jp/~robe/cpphtml/html02/cpp02024.html

と思ったら非constオブジェクトはキチンとconstじゃない方を呼ぶんだね
2022/03/19(土) 20:29:14.00ID:hj0ig94x
const Tからはconstメンバ関数しか呼べない

Tからはconstじゃない方を優先的に呼ぶ
constメンバ関数しかなかったらconstメンバ関数を呼ぶ
2022/03/19(土) 20:30:44.79ID:hj0ig94x
わかりやすいのはvector::size()const;

constから使えるし、constじゃなくても普通に使える
2022/03/19(土) 20:31:32.90ID:HgLoiHN9
constあるなしでオーバーロードできるんですか?
2022/03/19(土) 20:36:43.47ID:hj0ig94x
>>581
できる

件のvector::at(size_t) もそうだし、operator[](size_t)もそう

vector<int>{0};
const vector<int>cv{0};

v[0]=1; // int& operator[](size_t);
cv[0]=1; // const int& operator[](size_t)const; こっちがコンパイル通ったらまずいよね
583デフォルトの名無しさん
垢版 |
2022/03/19(土) 21:07:20.86ID:0pH7TqjX
皆さんありがとうございます
ちょっと自分で整理してみたんですけどこれで合ってますか?

☆普通の関数の場合
•引数のconstの有無だけのオーバーロード→コンパイルエラー
int A(int x);
double A(const int x);//エラー

•constなし引数への代入→const有無どちらも可
int A(int x);
int i=0;
const int c=0;
A(i);A(c);

•const引数への代入 → const有無どちらも可
int A(const int x);
A(i);A(c);
584デフォルトの名無しさん
垢版 |
2022/03/19(土) 21:08:09.65ID:0pH7TqjX
☆メンバー関数の場合
•thisに対するconstの有無だけのオーバーロード → OK
class B{
public:
 int C(){return 0;}
 int C() const{return 1;}
};

•const無メソッドだけあるとき→const変数からは呼べない
class B{
public:
 int C(){return 0;}
};

B b1;
const b2=b1;

b1.C();
b2.C();//エラー
585デフォルトの名無しさん
垢版 |
2022/03/19(土) 21:08:27.42ID:0pH7TqjX
•const有メソッドだけあるとき →const有無変数どちらからも呼べる

class B{
public:
 int C()const {return 1;}
};

b1.C();
b2.C();

•両方あるとき→変数のconstの有無に対応したものが呼ばれる

class B{
public:
 int C(){return 0;}
 int C()const {return 1;}
};

b1.C();//0
b2.C();//1
2022/03/19(土) 21:41:36.92ID:DslNhsx1
最近静かだったので見てなかったら、めっさ自演されてるw
2022/03/19(土) 21:43:30.89ID:DslNhsx1
const云々とか流石にやばすぎなので、↓へw

0からの、超初心者C++相談室
https://mevius.5ch.net/test/read.cgi/tech/1542002113/
588デフォルトの名無しさん
垢版 |
2022/03/19(土) 21:50:03.17ID:0pH7TqjX
😢
ありがとうございます
スレ汚し失礼しました
2022/03/19(土) 21:51:54.61ID:JACgrnJr
volatileメンバ関数の話もしないと片手落ちだぞ
2022/03/19(土) 22:02:55.92ID:hj0ig94x
>>588
その認識で合ってる

volatileもconstも伝染する性質が同じだけだからconstだけ覚えておけば問題ない

586はプログラム板で意味もなくマウント取るだけおじさんなので無視していい
2022/03/19(土) 22:17:28.58ID:DslNhsx1
マウント取りたいだけ、認められたいだけなのはお前w
自作自演のconst劇再演して面白い?w
2022/03/20(日) 01:21:01.58ID:lIF6fzsd
>>558を見てオモタが、
規格委員会が新しい言語要素を仕様化する際に、必ずコンパイラに実装してみて
実現可能性やよからぬ弊害が無いことや仕様に意図せぬあいまいさが無いことを実証するフェーズが入ると思うんだけど
その手の実装ってどこがやってるの?コンパイラメーカーに規格書のプレプリントを渡して丸投げ??
2022/03/20(日) 01:23:47.24ID:lIF6fzsd
もし規格委員会自身がやっているんなら神の実装技術を持った集団が規格委員会に居るはずで、>>558の言い様は正しくないかもしんないが、
万が一プロプラエタリーなコンパイラメーカーに丸投げなら参入障壁を高めるために複雑怪奇な仕様をあえて無理矢理引き受けるケースもあるかもしんない
かもしんない運転、
2022/03/20(日) 01:35:55.70ID:1+CNf8az
お前がそんな風に何も調べもせずに妄想だけで他人に聞いちゃう読んで字のごとくの「丸投げ」と一緒にしちゃダメだろwwww
2022/03/20(日) 01:37:12.20ID:1+CNf8az
調べればすぐ出てくるけど、
https://isocpp.org/
で聞けw
2022/03/20(日) 01:45:20.01ID:lIF6fzsd
いやすまん確かに
>(規格委員会が)実現可能性やよからぬ弊害が無いことや仕様に意図せぬあいまいさが無いことを実証する
というのは妄想やったわ;;;
2022/03/20(日) 01:48:15.78ID:1+CNf8az
何か裏を取れる事実がないなら全て妄想なんだよw お馬鹿さんw
598デフォルトの名無しさん
垢版 |
2022/03/20(日) 16:56:04.20ID:XASZAdc/
すいません教えていただけないでしょうか

棒読みちゃんっていうフリーソフトが一向に更新されないので
真似て作りたいのですがどのようなプログラム言語を学んだらよろしいですか?
599デフォルトの名無しさん
垢版 |
2022/03/20(日) 17:07:50.89ID:XF1vAqW3
参考書を一冊読み終わった程度のガチガチの初心者です。
初めて何か簡単なものを作ろうと思ったのですが、ウィンドウのサイズの指定の仕方が良くわかりませんでした。
VisualStudio2022でテンプレートはユニバーサルWindows-C++/Cxです。
そもそも質問する場所はここであってますでしょうか?
2022/03/20(日) 17:14:15.90ID:n/9ce90/
以下スレのほうが質問するのにあってると思うます

Win32API質問箱 Build127
https://mevius.5ch.net/test/read.cgi/tech/1639053176/
601デフォルトの名無しさん
垢版 |
2022/03/20(日) 18:05:54.67ID:XF1vAqW3
>>600
すみませんありがとうございます。
2022/03/20(日) 19:52:39.86ID:kJ/tleYc
なぜガチガチの初心者がなぜC++/CXいってまうんや。

昔はまだしも、C++17とCX両方襲いかかってくるから
理解するの大変な上、理解しても先が難しいと思うが。

普通にc#+やむなしなトコだけC寄りのC++でいいと思うが。
2022/03/20(日) 20:32:45.31ID:EuUP+kdP
>>598
テキスト文字列を合成音声で読ませるってことならスピーキングライブラリに頼りきることになるだろうしPythonとかでお手軽にできるんじゃない
ライブラリに頼る場合はPythonとかJavaとかC#らへんが適正だと思う
自分も少し前にC#でそういうの作った事あるけどWindowsならSystem.Speech.dll参照して簡単に喋らせられたな
2022/03/20(日) 23:15:40.56ID:1+CNf8az
別に喋らせるんならC++でもpythonでもC#でも出来るけど、Javaは難しい(面倒)だろうねwwwww
2022/03/20(日) 23:38:16.04ID:UJahVNmy
パピコンでも喋るのに
2022/03/20(日) 23:46:10.52ID:1+CNf8az
流石にそのレベルの音声合成と一緒にしたら可哀想w
PCM音源がなかったので、FM音源でしゃべらせたり、beep音で音楽(単音・音量調整なし)鳴らしたり効果音出したりが当時の流儀w
2022/03/21(月) 01:56:07.23ID:TlR/Mg8q
ゲームアーツのソフトがFM音源でよく喋ってたわ
2022/03/21(月) 13:45:57.08ID:sqIPbQd/
C# - C++/CX - ネイティブC++
というふうに間に挟めば時としてマーシャリング規則がメドイP/Invokeからおさらばできる……!
ような気がする……!!
609デフォルトの名無しさん
垢版 |
2022/03/21(月) 13:48:08.86ID:ROKj/vns
どうも599です。
買った参考書の終わりの方にUWPでなんか作ろうって書いてあったのと、スマートポインタってなんかいいなって思って、そんでC++/CXかなって思いました。
そもそも言語の選び方もなんか間違ってたっぽいんですけど、なんか、
最速っていう響きに寄せられてなんか、c++すごそう・・・、っておもって続けてます。簡単なものでもなんでもいいからなんか作りなと知人に言われたので、とりあえず簡単なタイマー作ることにしました。
2022/03/21(月) 13:55:13.39ID:2Z4azz5I
>>608
そこはC++/CXじゃなくてC++/CLI。というかまさにそのために作られたのがC++/CLI
611デフォルトの名無しさん
垢版 |
2022/03/21(月) 14:01:07.93ID:ROKj/vns
今やっと昨日の質問の答えを見てきたんですけど、UWPやるのはやめといたほうがいいらしいですね。
VisualStudioでタイマー作ろうと思ったんですけどおすすめのテンプレートありますか?
2022/03/21(月) 14:05:11.38ID:sqIPbQd/
>>610
えっ
2022/03/21(月) 14:21:34.68ID:j56ex+kV
C++/CLIでコンパイルされたDLLはC#で書いたDLLと同じように利用できる
C++/CXは知らん

public ref class C{
public:
property System::String^ S1{
System::String^ get(){return _S1;}
void set(System::String^value){_S1=value;}
private:
System::String^ _S1;
}
};

class C{
string S1{get;set;}
}
2022/03/21(月) 14:23:46.00ID:TlR/Mg8q
cliはc#と変わらんからなあ
間に挟む意味はないよ
2022/03/21(月) 14:57:53.89ID:HCPaDxP+
delphiとc++が合体したような言語よの
2022/03/21(月) 18:13:19.47ID:BAdp3agq
嘘つくな・・・あとUWPならその名のついたスレに行け
C++/CLIはマネージドコードを混ぜられるネイティブコードってだけで、C++の大規模な「MS独自拡張」
これを更に拡張してUWP要素を載せたのがCX
C++じゃないんで、独自スレでも立てて一人で盛り上げてくださいw
個人的にはUWP自体がオワコンなので、せめてC#でやればいいのにとしか思えないがやるのは君の自由だw
2022/03/21(月) 18:22:20.19ID:OLHk6lmK
>>616
マネージド拡張と勘違いしてるんでは?
2022/03/21(月) 18:28:56.05ID:BAdp3agq
https://docs.microsoft.com/ja-jp/cpp/extensions/component-extensions-for-runtime-platforms?view=msvc-170
2022/03/21(月) 18:32:58.53ID:Prmlj1K5
今はC++もクロスプラットフォームに対応する時代ですよ
いきなりWindowsべったりの書き方を覚えるより簡単なコンソールアプリとかQtから始めるのをお勧めしておきます
2022/03/21(月) 18:37:45.51ID:BAdp3agq
どうせいつものVC++使うconstの話ばかりするおじさんの自演w
2022/03/21(月) 18:46:38.57ID:2xjgwrAK
MSの独自拡張ガーとか言われてもC++を世界に普及させたのはMSですからね。
2022/03/21(月) 18:55:58.33ID:TEVzcoXo
MFCのことかね?
2022/03/21(月) 19:30:28.04ID:RS8xXzlz
ユニコードのことか〜
2022/03/21(月) 19:33:36.97ID:zSyDDKWU
utf16 なんか消えて、utf32 と uft8 だけになればいいのに…
2022/03/21(月) 20:04:10.64ID:HCPaDxP+
J#が一番ワケワカランかった
2022/03/21(月) 22:37:44.93ID:dYQgVp3+
ちんちんシュッ!シュッ!シュッ!
2022/03/22(火) 08:04:59.19ID:jyd+b1no
なんでqmlって機能があるQtよりelectronが普及したのか
2022/03/22(火) 08:19:14.63ID:4wXemx3i
>>627
Qtはライセンスが面倒じゃない?
特にwindowsはよくわからん。
2022/03/22(火) 10:17:12.52ID:e045zQYf
>>619
プラットフォームをWindowsからQtに乗り換えるだけじゃ同じことじゃん
アプリから見てAPIでしかないんだから
2022/03/22(火) 10:31:07.58ID:OaCGWLhd
泥舟に乗り換えろと言われてもな。
2022/03/22(火) 10:46:04.30ID:mouTiTR6
共通プラットフォーム使うのは全然マシだと思いますよ
■ このスレッドは過去ログ倉庫に格納されています