0からの、超初心者C++相談室

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/11/12(月) 14:55:13.35ID:Tf74ZWQr
何にも知らない0からの出発、超初心者のためのC++相談室
2021/06/06(日) 13:37:50.42ID:xlnMgrm3
>>301
自己申告なんて当てにしてはいけないのでは?
2021/06/06(日) 15:27:30.95ID:fMmzH2Jl
文面から必死な感じがヒシヒシと伝わってくるのに
皮肉も理解できないとはさすが厚顔無恥の代表格
誰も認めてくれないから自画自賛するしかないんですね
2021/06/06(日) 16:22:05.09ID:xlnMgrm3
>>303
え?必死?思いがけない反応ですね
まあ >>290 の方が提示したソースはハーバードシルトにしては冗長だと思って無駄丁寧っぽく説明したほうがいいかと >>292 をワサワサ書きましたが、それが必死だとは…
よく分かっている方 >>291 に対しては簡潔に私の意見 >>294 を送ってもう十分、仕様変更があったという情報 >>296 をいただいて感謝、というところでしょうか
305290
垢版 |
2021/06/06(日) 22:29:30.82ID:DvMt5hdj
>>291
>>292
どうもありがとうございます

constメンバ関数の理解が不十分だったようです
constメンバ関数はメンバ変数を変更しないという理解だけで、
constオブジェクトはconstメンバ関数しか呼べないことへの
理解が足りなかっため私自身混乱していました

ご説明いただいた内容を足掛かりに理解を深めたいと思います
3061
垢版 |
2021/06/07(月) 07:01:58.64ID:pWKPTo4/
まぁ、いいじゃねぇか、プログラミングなんて何にも知らないってのスレだし。
2021/06/07(月) 07:48:28.30ID:c29T7zKX
const char* const str[] は文字列アドレスを格納するポインタの配列って意味であってますか?
const char* strは文字列を格納するポインタ?
char str[] は文字配列?

一気に出てきてよくわからなくなって来たので間違えてたら教えて欲しいです。
2021/06/07(月) 08:39:52.02ID:xFpLHEPr
>>307
だいたいあってる
2021/06/07(月) 11:12:06.49ID:BLDePS2Q
ちゃんとメモリ確保してから使えよ
2021/06/07(月) 22:09:28.76ID:JY7FyEcf
>>308
ありがとうございます。
2021/06/08(火) 23:28:22.97ID:kZSYpF+Y
https://ideone.com/2fyV5M

103 と115で確保された動的配列のアドレスは別物なんでしょうか?
コピーコンストラクタの動きがよくわからないです
2021/06/09(水) 02:24:41.44ID:ZtayyY2i
103のarrayはコピーされたものだから別物だよ
てか初っ端から手直しが必要なソースを貼るのはやめろ
2021/06/09(水) 02:39:16.49ID:Ih94CWHU
スレの主旨的に初心者が初歩的な質問をするのは別に構わんとは思うんだが、
入門書にでも書いてあるようなことはよく読んで勉強したほうがいいと思うぞ。
素人が1レスで答えるよりはちゃんと体系だった解説のほうがわかりやすいよ、常識的に考えて。
2021/06/09(水) 04:24:03.76ID:BGdtXEJj
>>312
すいません、ヘッダーとかcpp分けてるのどうアップロードすればいいのか分からなかったです

後65行目にcopy(other.m_array, other.m_array + m_size, m_array);とあるのですが何をしてるのか分かりません
本には”第1引数以上第2引数未満のアドレスにあるデータを第3引数の指すアドレス以降にコピーする関数で…とあるのですが
具体的に何をしてる関数なのでしょうか?第2引数の足し算も何なのかよく分かりません。
2021/06/09(水) 04:43:32.09ID:ZtayyY2i
https://ideone.com/EScxwq
こうしたらそのままコンパイル通るやろ
自分のヘッダincludeしてるとこにヘッダの内容貼り付けるだけ

https://cpprefjp.github.io/reference/algorithm/copy.html
memcpyと似たようなもん(コピーの仕方は違うけど
other.m_arrayの指すアドレスから+m_size分のアドレスまで(未満)をm_arrayの指すアドレスから同じく+m_size未満までコピーしとるだけ
これで分からんならポインタの理解が出来てない
上記のとこだとイテレータとか出てるけどこの場合ポインタなので全部ポインタに読み替えていい
2021/06/09(水) 04:53:28.23ID:ZtayyY2i
ちょっと誤解招きそうなので補足
m_sizeは個数なのでアドレス値ではないがintのm_size個分アドレスが加算される
このへんは>>313の言う通り入門書嫁
317デフォルトの名無しさん
垢版 |
2021/06/09(水) 14:16:25.82ID:3Qpbsqp/
cpp で socket を読み書きする stream 系の class ってありますか?
boost にはあったと思いますが
標準のはあるんですか?無いですか?
2021/06/09(水) 16:06:33.34ID:Ih94CWHU
>>317
標準には無い。
が、ソケットに stream のインターフェイスをかぶせることはそれほど難しくはない。
2021/06/09(水) 22:30:15.61ID:BwbEIJxn
>>315
1引数から2引数で足したアドレスまでを第三引数にコピーしてるのですね
やっと分かりました。ありがとうございます。
頭硬い人はロベール向いてないのかな…
2021/06/09(水) 23:57:13.88ID:ZtayyY2i
それは良かった
まぁ最初は理解に時間かかるもんだ
321デフォルトの名無しさん
垢版 |
2021/06/10(木) 10:45:51.80ID:ZbfFyHii
>>318
thx

cpp の std にある関数で glibc の様な getpass ってありますか?
標準のは無いですか?
2021/06/10(木) 14:24:18.43ID:MOYAWABe
>>321
無いよ。
323デフォルトの名無しさん
垢版 |
2021/06/11(金) 14:28:13.59ID:tB3/M6ll
FILE *fp = fopen() で取得した fp を使って
stringstream としてアクセスすることは出来ますか?
2021/06/11(金) 17:27:01.32ID:DsaVPusD
>>323
直接的に一発で FILE* に stream をかぶせる手軽な方法はないと思うけど、
std::basic_streambuf を継承して setbuf, overflow, sync などをオーバーライドしたクラスを作ればストリームバッファになる。
(普通は std::basic_filebuf も内部的にはそう実装されているはず。)
それをストリームに結び付ければストリームに出来ることは何でもできるよ。

仕様を調べるのがすごくしんどいだろうけど、
実装は (細かいエラーチェックとかを抜きにすれば) 百行も要らないくらいの簡単なものでいけるんじゃないかな。
2021/06/16(水) 00:59:39.17ID:QFUk0bjY
>>323
fstreamを使えば?
#include <fstream>
#include <sstream>

std::ifstream fs("hoge.txt");
std::stringstream ss;
ss << fs.rdbuf();
fs.close();

それともfstream使えない特殊な環境?
2021/06/16(水) 16:36:23.72ID:uJQ6HHCX
FILE *fp = fopen(...);
std::ifstream fs(fp);
出来たらいいな
2021/06/17(木) 21:31:03.90ID:OB6uOiq6
関数へ渡す引数の型を限定したいときどう書くのが一般的ですか?
具体的に言うと符号なしのintだけ受けつけたいんですけど
2021/06/17(木) 23:54:09.39ID:Gi/wqrqm
>>327
暗黙の型変換を許さないということかな?
それならテンプレートにした上で型に制約を付ければいい。
ここでは C++11 でも通るように書いてみたけど C++20 以降なら
コンセプトが使えるのでもう少し簡単に書ける。

#include <type_traits>

template<class T>
typename std::enable_if<std::is_same<T, unsigned int>::value>::type foo(T) {
}

int main(void) {
int a = 1;
unsigned int b = 2;
foo(a); // これはエラーになる
foo(b); // これは通る
}
2021/06/18(金) 08:42:03.67ID:kejK9s3z
なんで戻り値voidに限定してんだよボケ餃子
2021/06/18(金) 11:49:14.92ID:AVf6Ht59
確かにそれで可能だけど、回答が超初心者スレのレベルを逸脱していると思うのですが
2021/06/18(金) 18:30:00.74ID:JA4mPV9U
>>329
単なるサンプルだからだよ。

>>330
超初心者が相談するという主旨のスレではあるけど、
超初心者には理解できないという結果になることもあるだろうし、
可能であれば相談した結果として初心者から脱したらそれに越したことは無いでしょ。

これで相談がクローズってわけでもないから
もっと深く知りたいってのならわからないところを続けて質問してもらってもいいわけで。

もっと簡単な方法があるならそれを提示するんだけども、なくなくなくない?
2021/06/18(金) 19:23:19.39ID:kejK9s3z
>>331
アホか
普通のenable_ifの使い方と全く違うお前だけのオナニーコード押し付けて何がサンプルだ
何不必要な制限勝手につけてドヤってんだボケ
2021/06/18(金) 19:32:07.35ID:JA4mPV9U
>>332
返却値 (または enabler) で制限するのは普通だろ。
むしろ他にどう使えるんだ?
2021/06/18(金) 19:35:45.29ID:kejK9s3z
>>333
マジで言ってんのか?

#include <type_traits>
template <class T, typename std::enable_if<std::is_same<T, unsigned int>::value>::type* = nullptr>
void foo(T)
{
}

int main()
{
// foo((int)1);
  foo((unsigned int)1);
}

enablerってこれのことか知らんが、お前のコードだと戻り値voidにしか出来んだろってこと
2021/06/18(金) 19:42:19.79ID:kejK9s3z
>>327
ちなコンセプト版(C++20対応コンパイラが必要)

#include <type_traits>

template <class T>
concept UnsignedInt = std::is_same_v<T, unsigned int>;

template <UnsignedInt T>
void foo(T value)
{
}

int main()
{
// foo((int)1);
  foo((unsigned int)1);
}
(インデントは全角なので注意)
まぁどっちも難しいと思うけど無理に理解せず流した方がいいと思う(それか制限あきらめるか
2021/06/18(金) 19:43:08.40ID:AVf6Ht59
>>331
いや、お前の言いたいことは分かるよ
ただテンプレートメタプロコードを超初心者にいきなり例示して、「わからないところを続けて質問」して回答を繰り返して、結果的に理解に至るのは何ヵ月後になるんですかと
テンプレートに関する高度な質問が飛び交う中、ここは超初心者スレとして機能するんですかと

この場合>>327が求めているのはドリルじゃなくて穴だと思うよ俺は
どういう背景があってunsigned int以外を受け付けたくないか、を聞くべきなのでは?
2021/06/18(金) 19:57:29.32ID:kejK9s3z
確かにそうだね
というか自分もテンプレート以外思いつかんかった・・

>>333
なんか変な癖あるから標準的な使い方がすっぽ抜けてたのかね
ボロカス言って悪かった
2021/06/18(金) 20:01:53.90ID:zIhiG+wy
あんまり詳しくない俺にはこういうのしか思いつかん。
__my_func() は直接呼ばないお約束にしておいて、static_assert で。
template のところは、書き換えは雰囲気でできると思うけど・・・

#include <type_traits>
#include <iostream>

unsigned int __my_func(unsigned int a) { return a * 2; }

template <class T> unsigned int my_func (T a) {
static_assert(std::is_same<T, unsigned int>::value == true, "is not uint.");
return __my_func(a);
}

int main() {
int a = 2;
unsigned int b = 2;

//std::cout << my_func(1) << std::endl; // assert
//std::cout << my_func(a) << std::endl; // assert
std::cout << my_func(1U) << std::endl;
std::cout << my_func(b) << std::endl;
}
2021/06/18(金) 20:30:53.23ID:JA4mPV9U
>>334
> お前のコードだと戻り値voidにしか出来んだろ

なんか変なこといってると思ったらそこがすれ違いか。
std::enable_if のテンプレート引数の二個目を省略しなければ何にでも出来るよ。
(std::enable_if の type は void に固定されているわけではない。)
クラスやコンストラクタは返却値がないから enabler を使うんであって、
普通の関数のときは返却値のほうで制御するのが普通だと思うぞ。
2021/06/18(金) 20:33:26.89ID:JA4mPV9U
>>336
まあそうなったら他に誘導してもいいし、資料を提示するだけで十分だと思った。
ただ背景をもうちょっと引き出すべきというのも確かに必要なことではあったな。
2021/06/18(金) 20:39:10.69ID:kejK9s3z
そうなんか、そういえばいつも自作alias使ってたから気付かんかったわ

>普通の関数のときは返却値のほうで制御するのが普通
別に戻り値でも引数でもいいが、クッソ読みづらいと思うけどな
あとそれならこういうスレで第2引数省略すんなよ、初心者惑わしたいのか?
3421
垢版 |
2021/06/19(土) 15:34:05.42ID:kvHrZ2tI
ここは中級者が、お互いを煽り合うスレでは無い、ということを理解して欲しい。
343デフォルトの名無しさん
垢版 |
2021/06/19(土) 16:53:11.57ID:zDrgWeBe
引数同じで戻り値だけ違う関数を造って使い訳たい
2021/06/19(土) 17:01:53.54ID:xVp2TfT/
>>342
俺ははちみつが書くより先に同じこと(enable_if)思ってたけど、このスレには不適切だと思って書くのやめてたんだけどな
あんな不適切で不親切な回答(テンプレートとSFINAEとか、はちみつも使いこなせてないようなものを使う上に戻り値の変更方法も、自身が言ってるコンセプト版も書かない)に怒っちゃいかんのか
2021/06/19(土) 17:30:35.18ID:/f53/cxR
>>344
そこらへんが少しばかり詳細なら初心者に理解できる内容になるという主張?
少々の書き方の工夫で初心者がわかるように解説できるわけないだろ。
関連知識も含めればちょっとした本一冊分くらいにはなる内容なんだから。

「まずはテンプレートの知識が必要ですね」ということが初心者に対する解で、
そこに至る前にごちゃごちゃしたことを詰め込むのは不親切だと思うわ。
2021/06/19(土) 17:34:51.32ID:xVp2TfT/
>>343
戻り値だけ違う同名関数は作れないのでテンプレートにするか、引数で戻り値を指定するしかないとおも
template <typename T>
T hoge();

template <>
int hoge<int>() {}

template <>
float hoge<float>() {}

hoge<int>();
hoge<float>();

もしくは
int hoge(int) {}
float hoge(float) {}

?hoge(int());
hoge(float());
2021/06/19(土) 18:00:39.76ID:kvHrZ2tI
1 + 1 = 1
2021/08/24(火) 01:28:35.73ID:WM1jAzNs
https://pastebin.pl/view/e395f5ca

operator関数の動きがよくわからないんですが
tmp.x = x + p.x;
これの p.xと xとtempはどのオブジェクトのことを指してるんでしょうか?
2021/08/24(火) 01:50:15.06ID:MkJE9y3A
>>348
operator+ は演算子 + の実体として機能する。
故に p1+p2 は p1.operator+(p2) と書いた場合と完全に同じ。

tmp はもちろんこの関数内で宣言した tmp 変数だし、
p は渡された引数 (この場合は p2) のコピーなので p.x には 6 が入ってるね。
2021/08/24(火) 02:43:37.56ID:WM1jAzNs
>>349
ありがとうございます。引数がどれに対応してるかわかりました。
p1.operator+(p2) これは何でしょう?
351デフォルトの名無しさん
垢版 |
2021/08/24(火) 03:37:20.26ID:gGQMgsWd
掛け算の*と、
色々を示す*が
同じ*なんで困っていますが、どうしたらいいんでしょうか?
2021/08/24(火) 03:55:09.38ID:jikR3Y9f
色々ってワイルドカードのこと?
C++においては*は乗算かポインタ関係だけだよ

>>350
p1のメンバ関数として普通にoperator +を呼んでるだけ
2021/08/24(火) 04:29:07.93ID:gGQMgsWd
ありがとうございます。
c++ のワイルドカード記号ってなんでしょうか?
2021/08/24(火) 04:33:24.90ID:jikR3Y9f
言語そのものには無いよー
エディタやIDEで検索するのには使えることもあるが
2021/08/24(火) 04:45:36.01ID:gGQMgsWd
教えてもらって、勉強になりました。
ありがとうございました。
2021/08/24(火) 07:22:03.54ID:WM1jAzNs
https://pastebin.pl/view/31e451ad

クラスの型変換と型変換用のコンストラクタの意味が全く分からないのですが
これをすると何が得なのでしょうか?10行目は普通のコンストラクタに見えますがなぜ変換用?
入門書に載ってるコードなのですがエラーで動作もせず何がなんだか分かりません…
2021/08/24(火) 15:23:13.01ID:jcrsR8Np
2つ目のprivateはpublicの間違いじゃね?
あと変換は、単に引数一つだけを受け取るコンストラクタは
自動的に?暗黙のキャストにも使われる、というだけ(それを禁止する方法もあるが
2021/08/25(水) 07:15:15.42ID:dwOa++JV
>>357
おかげさまで動きました。ありがとうございます。
でもいまいち型変換の意味が分からないのですが
operator 型名()return 変数を定義するとどの変数にも代入出来るようになるってことですか?
2021/08/25(水) 15:58:08.24ID:3/bOIe3o
C++ キャスト でぐぐるといいよ
(キャストはCにもあるけど)
2021/08/25(水) 22:29:05.16ID:/Q8zinJC
>>358
型変換はその名前の通り型を変換する。 変換と同等の処理を普通の関数とし
て書いてもかまわないんだが、変換関数 (conversion function) または変換
コンストラクタ (converting constructor) が定義されていると暗黙の型変換
が適用される文脈では勝手に適用して変換してくれるので便利。

例えば以下のように foo 型のオブジェクトを受けとる文脈で bar 型のオブジェ
クトを渡しても通るのは変換が適用されるから。

struct foo {};

struct bar {
operator foo() {
return foo();
}
};

void func(foo) {}

int main(void) {
foo x = bar();
func(bar());
}
2021/08/26(木) 01:12:00.54ID:BlNdGFU0
>>360
ようやくイメージできてきました。ありがとうございます!
2021/08/26(木) 06:25:31.31ID:C2TXXzWD
>>360

そんな難しくせずに、

{ change A to B }

でいいんじゃないの?
2021/08/26(木) 09:12:40.22ID:QSgOZ0Rh
なんのこっちゃ
2021/08/27(金) 08:15:52.67ID:ue9a70Za
コマンドライン引数の意味が全く分からないのですが
Visualstudioを使っているからでしょうか?
それとも、コマンドプロンプトの使い方を理解できないでしょうか?

https://programming.pc-note.net/c/commandline.html
ここも参照にしたのですが何が得で何ができてるのかよく分かりません。
コマンドラインってVSでデバッグ無しで実行をした時に出る黒い画面ではないですよね?

質問ばかりですいませんが本当に何も分からないのでお願いします。
365デフォルトの名無しさん
垢版 |
2021/08/27(金) 11:14:47.31ID:xylLBHc1
>>364
メモ帳でファイルをドラッグアンドドロップで開く例が紹介されているが
これはWindowsのShellであるExplorerがexefileに対して登録されているドラッグアンドドロップハンドラーを処理してドロップしたファイルのフルパスを文字列として起動するプロセス環境のコマンドラインパラメータとして渡している
黒い画面(コマンドプロンプト)にもExplorerとは違うがプロセスの起動とパラメータを渡す機能が実装されている
起動するexefileに続けてスペースを開けたあと記入した文字列がそのままパラメータとして渡される
ファイル名以外にも自由に渡せるためプログラムの動作を指定したり変更する目的で使用される
あなたが作成するプログラムでシェルから渡されたコマンドラインパラメータを確認する方法はそのページにもある通りだ
コマンドラインパラメータを活用してバラ色の人生を満喫してくれ
366デフォルトの名無しさん
垢版 |
2021/08/27(金) 14:23:11.73ID:8dQk5Ix1
getopt
2021/08/27(金) 23:33:15.78ID:cMIVTei2
例えば、デスクトップにショートカットを作る。
コマンドプロンプトを起動して、Ruby スクリプト・a.rb を実行する

リンク先
C:\Windows\System32\cmd@.exe /k "ruby C:/Users/Owner/Documents/a.rb"

注意。書き込めないので、間に@を入れました

作業フォルダ
C:\Users\Owner\Desktop

a.rb 内には、puts ARGV
(ARGV は配列で、そこにコマンドライン引数が渡ってくる)

と書いておいて、ショートカットに、フォルダx・ファイルb.txt をdrag&drop すると、
コマンドプロンプトが起動して、以下のように表示される

C:\Users\Owner\Desktop\x
C:\Users\Owner\Desktop\b.txt
2021/10/06(水) 22:36:41.57ID:OG+j1FAK
const char* const str[]={"aaa","bbb","ccc"}

constの効果を教えてほしいです
後ろのstrの前のconstは付けると
const str[0]="dddd"って出来なくなるのは分かったのですが
先頭のconstが分かりません
2021/10/06(水) 22:51:34.11ID:ItOX1MR6
str[0][0]='d';
2021/10/06(水) 22:53:20.88ID:OG+j1FAK
>>369
なるほど。
ありがとうございます。
2021/10/09(土) 07:12:25.69ID:JFpyaThm
ロベールC++入門の代入演算子についてなのですが
コピーコンストラクタのときは動的配列をdelete[]しなかったのに
なぜ代入演算子を使うときだけdelete[]するのか分からないので教えて下さい
本にはm_arrayには前に確保したメモリが存在するためdelete[]しないとメモリリーク
と書いてあるのですがコピーコンストラクタも同じじゃないの?と混乱してます

100行目です
https://ideone.com/xL8UOn
2021/10/09(土) 10:44:46.48ID:tDH5FAwQ
newしたメモリが不要になったらdeleteする
これだけ

コピーコンストラクタでのdelete、
いつnewしたデータに対して?
2021/10/09(土) 17:51:02.84ID:QAOoCtV/
>>372
すいません、わからないです。
コピーコンストラクタはnewでアドレスを確保しないものなのですか?
2021/10/09(土) 18:03:01.95ID:Z56nk6n1
>>373
ロベールの C++ 入門を読んだことがないからどういう構成になっとるか知らんけど、
それがわからんのならたぶんそれ以前の章を理解でてきないと思う。
2021/10/09(土) 18:04:17.21ID:jELfb/xT
>>371
代入演算子は既にあるオブジェクトを別のオブジェクトで上書きする操作
コピーコンストラクタは別のオブジェクトから新しいオブジェクトを作って初期化する操作

代入演算子でdelete[]しているのは既にあるオブジェクト(*this)のメンバとして確保済みのメモリ領域
コピーコンストラクタの実行時には「既にあるオブジェクト」にあたるものは無いので、deleteするものも無い
2021/10/09(土) 20:35:07.35ID:QAOoCtV/
>>375
初期化と代入の知識が曖昧でした
分かった気がします。ありがとうございます。
377デフォルトの名無しさん
垢版 |
2021/10/10(日) 20:55:50.73ID:6QW0WSDe
AtCoderの初心者向けのC++の説明のページを読んでいます。

vector<int> a(10);

aの第i番目の要素にアクセスする場合、a[i]よりもa.at(i)と書くほうが良いと書いてあります。
これは現在のC++で推奨されている書き方でしょうか?それとも単に初心者はそう書いたほうがいいというだけのことでしょうか?
2021/10/10(日) 21:05:41.56ID:KKHdhYPj
>>377
>a[i]よりもa.at(i)と書くほうが良い
そう主張されている理由はどのように書かれていますか?私はどちらでも大差ないと思っていますが‥‥
2021/10/10(日) 21:07:18.12ID:6QW0WSDe
>>378

vector<int> a(10);
b = a.at(10);

などと書いた場合にコンパイルエラーになりますが、エラーメッセージがatを使うと表示されるというのが理由です。
2021/10/10(日) 21:08:35.36ID:6QW0WSDe
初心者でないプログラマーでatを使って書いている人は少数派ではないのですか?
2021/10/10(日) 21:31:47.25ID:zWyM5YPA
範囲外にアクセスする可能性があるならat、ちゃんと事前にチェックするなら[]でいいんじゃない?
2021/10/10(日) 22:58:42.68ID:gnqjARRQ
気分によるけどatが好きです
383デフォルトの名無しさん
垢版 |
2021/10/10(日) 23:07:44.84ID:gmqGyDAJ
vector配列を指すポインタを使ってる時に[i]で指定する書き方がよく分からないのでat(i)使ってる
2021/10/10(日) 23:14:51.45ID:U88jNIFg
(*ポインタ)[i]
2021/10/10(日) 23:15:56.24ID:cCUvKLuJ
>>377
これのことだね。
https://atcoder.jp/contests/apg4b/tasks/APG4b_n

例外処理やアサートの説明を省略しているせいでどう使い分けるべきものなのかがよくわからん説明になってる。
C++ はかなり複雑で、 AtCoder のサイトにある雑な説明だけでは細かいところまで理解はできないよ。

C++ の言語仕様の詳細を理解するのに手間取って競技を始められないくらいならそういう風に割り切れという意味で
AtCoder としては at を推してるんであって、言語仕様やプログラマの習慣としてどちらかを推奨してたりはしない。
それぞれに用途がある。
2021/10/11(月) 00:50:58.08ID:kxIK5/L+
余談だが C++ の言語仕様としては推奨というのはないが非推奨というのはあって
(結果的に同等のよりよい機能を推奨するのと同じことになっている場合はある)
将来の言語仕様の更新で廃止するつもりがあるということを意味する。
387デフォルトの名無しさん
垢版 |
2021/10/11(月) 02:00:14.70ID:xizp5ONl
ポインタ->operator[](i)
2021/10/13(水) 01:04:04.91ID:gvBCET4D
Notepad++でcppファイルを選んで実行をすると
Visualstudioが立ち上がるのですが
どうすればNotepadで実行出来るのでしょうか?
2021/10/13(水) 02:24:33.63ID:YMzdF2UZ
>>388
コンパネ→既定のプログラム→ファイルの関連付け

設定→アプリ→既定のアプリ→ファイルの種類ごとに
あたりでなんとかならないでしょうか?
390デフォルトの名無しさん
垢版 |
2021/10/13(水) 03:03:01.45ID:gvBCET4D
>>389
回答ありがとうございます。
ファイルの関連付けをメモ帳とVisualstudioしか選べなかったです。(後Microsoftストア)
Notepad++は初期設定結構大変な感じなんでしょうか?

https://imgur.com/a/V3jOiV0
2021/10/13(水) 19:41:40.64ID:YMzdF2UZ
>>390
たしかに「設定→アプリ→既定のアプリ→ファイルの種類ごとに」
はうまくいかないですね
では、
開きたい拡張子を持ったファイルを右クリック→プログラムから開く→別のプログラムを開く→その他のアプリ→このPCで別のアプリを探す
ではどうですか?

私は win7 メインで、うまいアドバイスができなくてすみません‥‥
2021/10/19(火) 08:20:19.87ID:7/3R28mC
C++でアプリを作る場合って、QTってやつかMFCって奴を勉強すればいいのでしょうか?
C++でWIN32APIを学ぶっていうのはないですか?
2021/10/19(火) 10:04:52.66ID:emsejTNf
ないです
2021/10/19(火) 10:18:17.44ID:vPA5f3eX
あります
395デフォルトの名無しさん
垢版 |
2021/10/19(火) 11:51:03.31ID:90qj1F6l
メッセージループによるイベントドリブン型アプリケーション
「ウインドウ」と「メッセージ」というウインドウズの基本概念ぐらいは理解してもいい
396デフォルトの名無しさん
垢版 |
2021/10/19(火) 19:00:27.41ID:C9DkQou5
tcl/tk
wxWidgets
DXLib
Unity
2021/10/19(火) 20:20:27.92ID:KyySFZDA
>>392
「C++でwin32api」ですか…
そういうのは c で win32api を理解した後、各自が独力で工夫して c++ と win32api とを辻褄あわせするものだと思っていましたが、それはそうと、そういう書籍は過去にありました
たしか leaf というライブラリと WOOL という lisp 処理系が掲載されていた記憶があります
2021/10/19(火) 22:23:42.02ID:P+gkhAFH
MFC は何十年も前だけど、今もあるの?

QT は、Linux で聞くけど、Windows で使うの?
399デフォルトの名無しさん
垢版 |
2021/10/20(水) 02:20:42.50ID:+2OzLQ7p
>>398
Qt5Core.dllで検索する色々出てくるから、win/macとマルチのアプリなんかで割と使われてみたいね。
手元だとfusion360とかresolveとかで使われてるっぽい。商用ライセンスあるからかな?
400デフォルトの名無しさん
垢版 |
2021/10/20(水) 11:06:18.19ID:OEiI06HQ
5以前は良かったんだがな
2021/10/20(水) 13:35:36.40ID:dLyN/sz8
>>392
MFC は API の利用をちょっと楽にする薄いラッパーという感じだな。
API のことを忘れて MFC の使い方だけ学べばよいというようなものではない。

>>397
今は C++/WinRT の時代だぞ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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