エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1545944692/
探検
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
2019/04/25(木) 06:54:38.08ID:6xUIrXDu
2019/06/18(火) 18:05:58.84ID:U3/WUc9c
2019/06/18(火) 18:50:13.29ID:ujoReLWG
2019/06/18(火) 19:28:14.92ID:U/JJd+xv
>>59
馬鹿なの?
馬鹿なの?
2019/06/18(火) 20:04:16.08ID:ADibu3ht
きゃー はずかしい><
70デフォルトの名無しさん
2019/06/18(火) 22:39:27.24ID:R4l3qwnJ int a = b - 1;
if (a < 0){
a = 0;
}
これのスマートな書き方を教えてください。
if (a < 0){
a = 0;
}
これのスマートな書き方を教えてください。
2019/06/18(火) 22:45:19.63ID:BC11WozD
ここで聞いていいのかわからないけど
組み込み系で上位割り込みでライト、下位割り込みでリードする場合割り込み禁止する必要ありますか?
組み込み系で上位割り込みでライト、下位割り込みでリードする場合割り込み禁止する必要ありますか?
2019/06/18(火) 23:11:51.18ID:gZnFDsgJ
2019/06/18(火) 23:13:26.53ID:48k2aFsK
>>70
bの型が不明な場合はスマートな書き方は特に無い
bの型が不明な場合はスマートな書き方は特に無い
2019/06/18(火) 23:24:05.71ID:f34xyyaF
>>70
int a = b < 1 ? 0 : b - 1;
int a = b < 1 ? 0 : b - 1;
2019/06/18(火) 23:28:32.54ID:BC11WozD
>>72
何故ダメなのかが理解できてません。
書き忘れてましたが割り込みはタイマで周期的に発生させてます。
リード中にライトが発生しても下位割り込みは一周期遅れて上位割り込みのライト結果をリードするだけではないのですか?
何故ダメなのかが理解できてません。
書き忘れてましたが割り込みはタイマで周期的に発生させてます。
リード中にライトが発生しても下位割り込みは一周期遅れて上位割り込みのライト結果をリードするだけではないのですか?
2019/06/18(火) 23:45:23.52ID:gZnFDsgJ
>>75
writeの割り込みが発生するまではreadは進行するんじゃないの?
だから「readの途中で」なんだけど
「2つの割り込みは完全制御下にあり、read中にwriteは発生しない」なら大丈夫だよ、当然
writeの割り込みが発生するまではreadは進行するんじゃないの?
だから「readの途中で」なんだけど
「2つの割り込みは完全制御下にあり、read中にwriteは発生しない」なら大丈夫だよ、当然
2019/06/19(水) 00:02:23.61ID:/MswhT0Q
>>75
>リード中にライトが発生しても下位割り込みは一周期遅れて
ここがちょっと勘違いを感じる
割り込み処理が終わったら、割り込まれた処理の続きをするのよ
低レベルにDBのrollbackみたいな複雑な仕組みはないのよ
>リード中にライトが発生しても下位割り込みは一周期遅れて
ここがちょっと勘違いを感じる
割り込み処理が終わったら、割り込まれた処理の続きをするのよ
低レベルにDBのrollbackみたいな複雑な仕組みはないのよ
2019/06/19(水) 02:33:40.48ID:v2+76oWz
char型の動作がどうもわからない。
例えば
char str[] = "abc"; として
cout << &str[0]; ----> abc
になるのはなんで? index 0番だから a がでると思ったんだけど...
初心者ですまん
例えば
char str[] = "abc"; として
cout << &str[0]; ----> abc
になるのはなんで? index 0番だから a がでると思ったんだけど...
初心者ですまん
2019/06/19(水) 03:26:09.45ID:0DgdOBcz
2019/06/19(水) 05:18:40.21ID:xxgeB2IO
2019/06/19(水) 08:25:58.04ID:huda4IDC
2019/06/19(水) 09:03:32.83ID:bPRT+MIA
2019/06/19(水) 09:06:41.55ID:zjjAtQWn
ちなみに上位下位って割り込みの優先度のこと?
2019/06/19(水) 09:22:03.41ID:RukLP400
たとえ1命令でも安全かどうかはcpuによる
あいまいな質問にはあいまいな回答しか返らない
マニュアル読むのが正解
あいまいな質問にはあいまいな回答しか返らない
マニュアル読むのが正解
2019/06/19(水) 09:54:17.80ID:huda4IDC
86デフォルトの名無しさん
2019/06/19(水) 11:34:02.00ID:kjBiA8ae vector<std::vector<char> > vec;
の二次元配列で、一行を削除するのはどうしたらよいのでしょうか。
int row = 1;
vec.erase(vec.begin() + row );
ではだめなんでしょうか。
の二次元配列で、一行を削除するのはどうしたらよいのでしょうか。
int row = 1;
vec.erase(vec.begin() + row );
ではだめなんでしょうか。
87デフォルトの名無しさん
2019/06/19(水) 11:40:44.36ID:kjBiA8ae すみません。これでちゃんと動きました。
お騒がせしました。
お騒がせしました。
2019/06/19(水) 15:30:59.62ID:2x/CN7xY
>>70
int a = max(b - 1, 0);
というような書き方を見たことが有る。
int a = max(b - 1, 0);
というような書き方を見たことが有る。
2019/06/19(水) 20:53:07.15ID:RukLP400
2019/06/19(水) 23:49:00.15ID:v2+76oWz
91デフォルトの名無しさん
2019/06/23(日) 01:18:33.15ID:X4lwQ0L+ 学校の課題でバブルソートアルゴリズムを使った画像処理の課題で、VSの警告にfor-loopの定義が無効です:最初の条件はテストを満たしていません。ループボディは実行されませんと出てきます。これはどういった原因で出てくる警告なのか教えほしいです
2019/06/23(日) 01:30:30.52ID:xbroTRmV
ループの初期状態でループ終了条件を満たしている
2019/06/23(日) 01:31:24.99ID:xbroTRmV
単純化すればこういうこと
for (int i = 0; i < 0; i++)
for (int i = 0; i < 0; i++)
2019/06/23(日) 06:24:41.17ID:TKCAljQF
てst
95デフォルトの名無しさん
2019/06/23(日) 11:28:18.87ID:6GXr3JQp 最近BS/CSが映らなくなった人はここを見ると良い
【B-CAS改造】Bカスカード2038化書き換えツール配布所 205
https://mevius.5ch.net/test/read.cgi/avi/1560914909/1-100
【B-CAS改造】Bカスカード2038化書き換えツール配布所 205
https://mevius.5ch.net/test/read.cgi/avi/1560914909/1-100
96デフォルトの名無しさん
2019/06/24(月) 06:51:52.73ID:lwUqObiG FILE* file;
file=fopen("test.txt","w");
fclose(file);
これでソリューションのフォルダ内にtest.txtファイルが作られると読んでる入門書には書いてあるのですが
VisualStudioのフォルダ内、何処を探しても生成されてません;何処に有るのでしょうか?
file=fopen("test.txt","w");
fclose(file);
これでソリューションのフォルダ内にtest.txtファイルが作られると読んでる入門書には書いてあるのですが
VisualStudioのフォルダ内、何処を探しても生成されてません;何処に有るのでしょうか?
2019/06/24(月) 09:37:54.94ID:LpgW8DGO
ドキュメントにプロジェクトを作らなかったか?
その中かと
その中かと
2019/06/24(月) 10:06:16.55ID:N4e4wdnY
>>96
「ソリューションのフォルダ内」であって「VisualStudioのフォルダ内」じゃないぞ
「ソリューションのフォルダ内」であって「VisualStudioのフォルダ内」じゃないぞ
2019/06/25(火) 07:24:49.37ID:jHEFOU5u
100デフォルトの名無しさん
2019/06/26(水) 01:39:16.88ID:6WTwK8fu STLコンテナ「set」の特定要素を削除したいとき
set<int> s = {1,2,3};
for (auto itr = s.begin(); itr != s.end(); ++itr) {
cout << *itr << endl;
if (*itr == 2) s.erase(itr);
}
これの実行結果が
1
2
1
3
となるのですが、erase後に最初に戻っているように見えるのは偶然、つまり不定の動作ですか?
なお、正しいイタレータの使い方は以下のようになるのは承知してます
for (auto itr = s.begin(); itr != s.end(); ) {
cout << *itr << endl;
if (*itr == 2) itr = s.erase(itr);
else ++itr;
}
set<int> s = {1,2,3};
for (auto itr = s.begin(); itr != s.end(); ++itr) {
cout << *itr << endl;
if (*itr == 2) s.erase(itr);
}
これの実行結果が
1
2
1
3
となるのですが、erase後に最初に戻っているように見えるのは偶然、つまり不定の動作ですか?
なお、正しいイタレータの使い方は以下のようになるのは承知してます
for (auto itr = s.begin(); itr != s.end(); ) {
cout << *itr << endl;
if (*itr == 2) itr = s.erase(itr);
else ++itr;
}
101デフォルトの名無しさん
2019/06/26(水) 07:52:05.91ID:Re4GWmuT102デフォルトの名無しさん
2019/06/26(水) 09:02:19.59ID:16uFKMyS いやいや
103デフォルトの名無しさん
2019/06/26(水) 09:07:00.61ID:Re4GWmuT あ、インクリメントのほうが先か。ごめんなさい。
104デフォルトの名無しさん
2019/06/26(水) 14:50:08.20ID:7raG/MY1 未定義動作を起こしてるんで
プログラムがたまたまクラッシュもせずに最後まで動いたというレベルからの偶然
プログラムがたまたまクラッシュもせずに最後まで動いたというレベルからの偶然
105デフォルトの名無しさん
2019/06/26(水) 23:47:19.51ID:6WTwK8fu やはり偶然なんですね
ありがとうございました
ありがとうございました
106デフォルトの名無しさん
2019/06/28(金) 01:54:12.27ID:kYWVUvHS constを外すのに使う const_cast<T&>(t) ですが、Tをいちいち書くのが面倒なので
そうだdecltypeを使えば楽できると思ったものの、remove_constも併用しないといけないみたいですね
参照だったらさらにremove_referenceも必要で、これじゃTがくっそ長くない限り有り難みが薄いですね
なんかもっといいやり方ないですかね?
const int i = 0;
const_cast<remove_const<decltype(i)>::type&>(i) = 1
const int& j = i;
const_cast<remove_const<remove_reference<decltype(j)>::type>::type&>(j) = 2;
そうだdecltypeを使えば楽できると思ったものの、remove_constも併用しないといけないみたいですね
参照だったらさらにremove_referenceも必要で、これじゃTがくっそ長くない限り有り難みが薄いですね
なんかもっといいやり方ないですかね?
const int i = 0;
const_cast<remove_const<decltype(i)>::type&>(i) = 1
const int& j = i;
const_cast<remove_const<remove_reference<decltype(j)>::type>::type&>(j) = 2;
108デフォルトの名無しさん
2019/06/28(金) 02:11:51.51ID:4VImPalK const_cast<decay_t<decltype(i)>&>(i)
で大体事足りる
まあ大抵は
using U=decay_t<...>;
とかしておくが
で大体事足りる
まあ大抵は
using U=decay_t<...>;
とかしておくが
109デフォルトの名無しさん
2019/06/28(金) 03:26:31.25ID:kYWVUvHS >>108
有り難うございます。decayなんてあるんですね
ここ見るといろいろ機能あるようで
https://ja.cppreference.com/w/cpp/types/decay
type_traitsってあんまり詳しくないですけど、よくこんなの考えたなぁと感心します
仕組みを知らないと魔法使ってるみたいに見えますね
有り難うございます。decayなんてあるんですね
ここ見るといろいろ機能あるようで
https://ja.cppreference.com/w/cpp/types/decay
type_traitsってあんまり詳しくないですけど、よくこんなの考えたなぁと感心します
仕組みを知らないと魔法使ってるみたいに見えますね
110デフォルトの名無しさん
2019/06/28(金) 18:20:06.99ID:SuTGhcfs 作りたいものにC++が必要なので1から学んでるプログラミング初心者です
biginteger という型の使い方・使い道がよくわからず悩んでいます。
biginteger という型の使い方・使い道がよくわからず悩んでいます。
111デフォルトの名無しさん
2019/06/28(金) 21:15:56.74ID:+JSlLfql C/C++の標準にそんな型ないよ
C#にBigIntegerあるみたいだね
使い方は普通の整数型と同じ
使い道は、大きな整数を扱いたい時
使い道がわからないものを無理に使う必要ないんじゃね?
C#にBigIntegerあるみたいだね
使い方は普通の整数型と同じ
使い道は、大きな整数を扱いたい時
使い道がわからないものを無理に使う必要ないんじゃね?
112デフォルトの名無しさん
2019/06/28(金) 21:19:18.85ID:U9hxi1vj 多倍長整数ならboostには入ってるからそのうち標準にも来るかもね
114110
2019/06/29(土) 19:00:51.29ID:gqtgvd1f 標準の型じゃなくて読み込んでるライブラリ?のクラスだったみたいです
そっちのマニュアルを見て見たら詳しく書いてありました…
いろいろ教えていただきありがとうございました。
そっちのマニュアルを見て見たら詳しく書いてありました…
いろいろ教えていただきありがとうございました。
115デフォルトの名無しさん
2019/07/24(水) 09:52:41.24ID:0j2752sC オブジェクト指向を使ってないアプリを c++ (コンパイラはg++6)で作るのは良でしょうか?それとも推奨されないでしょうか?
当方、意図せずにそうなってしまいました。
Cで書いてるつもりだったのですが、Cでは認められないと知らずにブロック頭以外の所での変数の宣言などを使っていて、
エラーにならなかったのは、Makefile が c++
用の流用で、ソースの拡張子が.cc だったからでした。
こんな c++ コンパイラの使い方は、許される事なのか、良くある事なのか気になりました。
当方、意図せずにそうなってしまいました。
Cで書いてるつもりだったのですが、Cでは認められないと知らずにブロック頭以外の所での変数の宣言などを使っていて、
エラーにならなかったのは、Makefile が c++
用の流用で、ソースの拡張子が.cc だったからでした。
こんな c++ コンパイラの使い方は、許される事なのか、良くある事なのか気になりました。
116デフォルトの名無しさん
2019/07/24(水) 10:00:57.54ID:zKJbgf3R Cで書いてるつもりがC++になってた、は良くはないけど別に気にすることじゃないかと
Cであることが要件ならCに直せばいいし、C++でもokならそれでもいいし
要件満たすものが出来てんならひとまずokじゃない?
Cであることが要件ならCに直せばいいし、C++でもokならそれでもいいし
要件満たすものが出来てんならひとまずokじゃない?
117デフォルトの名無しさん
2019/07/24(水) 10:52:12.93ID:yY+SPHit ブロック頭以外の所での変数の宣言はC言語で認められてるでしょ
118115
2019/07/24(水) 12:47:15.91ID:qoUieyoj >>116 どうもです。
ひとまず動いてるのですが、気になりました。
例えば、「完全にcで書いていてcでコンパイル出来るものでも、c++ 必要なものでも、どちらにも拡張子は .cc に統一して、どちらにも常にコンパイラは c++ を使う」と言う態度ってどうでしょう?
c++ が c の上位互換ならこれで良いように思えます。
ひとまず動いてるのですが、気になりました。
例えば、「完全にcで書いていてcでコンパイル出来るものでも、c++ 必要なものでも、どちらにも拡張子は .cc に統一して、どちらにも常にコンパイラは c++ を使う」と言う態度ってどうでしょう?
c++ が c の上位互換ならこれで良いように思えます。
120デフォルトの名無しさん
2019/07/24(水) 13:31:50.28ID:zKJbgf3R >>118
いや、プログラムってそもそも道具なんだから何で書かれてるかとかどうでもいいかと
複数人で開発していて他人もコードを見ることがある、技術情報として発信する、要件として言語の指定がある
とかいう縛りがあるならその縛りに応じるようにコードを書き直せば良い
個人的にはCでなければ困るというのでなければC++にするし、多少の困りくらいなら回避してC++にする
基本的にC++はCの上位互換
いや、プログラムってそもそも道具なんだから何で書かれてるかとかどうでもいいかと
複数人で開発していて他人もコードを見ることがある、技術情報として発信する、要件として言語の指定がある
とかいう縛りがあるならその縛りに応じるようにコードを書き直せば良い
個人的にはCでなければ困るというのでなければC++にするし、多少の困りくらいなら回避してC++にする
基本的にC++はCの上位互換
121115
2019/07/24(水) 20:52:46.78ID:qoUieyoj 私が知りたかったのは、ソースを書くのに何言語を選ぶべきか、でははないです。
知りたかったのは、例えば、
「ソースが c -> gcc 。ソースが c++ -> g++」
をしないで
「一切合切どちらも常に g++ 」でも良いのか?でした。
知りたかったのは、例えば、
「ソースが c -> gcc 。ソースが c++ -> g++」
をしないで
「一切合切どちらも常に g++ 」でも良いのか?でした。
122デフォルトの名無しさん
2019/07/24(水) 21:07:11.23ID:0jLIOgkf123115
2019/07/24(水) 22:28:11.62ID:tRuObC3H124デフォルトの名無しさん
2019/07/24(水) 23:59:42.77ID:7wBUx5ir 良い悪いじゃないけど
実質的にCのプログラムでしかないなら純粋なCのプログラムとして書き直して
Cコンパイラとの組み合わせで使っていた方が幸せだと思うよ
実質的にCのプログラムでしかないなら純粋なCのプログラムとして書き直して
Cコンパイラとの組み合わせで使っていた方が幸せだと思うよ
125115
2019/07/25(木) 13:26:54.50ID:A3AJFf0Q その方がサイズも小さく速度も速いですかね。
トライしてみます。
トライしてみます。
126デフォルトの名無しさん
2019/07/27(土) 08:53:41.05ID:zR8v2AWF >>125
ブロック変数宣言の位置だけがブロックの冒頭ではないというだけなら、通常、
速度低下は全く無く、それをブロックの冒頭に書き直しても速くなることは
有りません。
また、コンストラクタ、デストラクタ、仮想関数、STL、コンテナなどを使わない限り
通常、C++がCより遅くなるということは有りません。
ブロック変数宣言の位置だけがブロックの冒頭ではないというだけなら、通常、
速度低下は全く無く、それをブロックの冒頭に書き直しても速くなることは
有りません。
また、コンストラクタ、デストラクタ、仮想関数、STL、コンテナなどを使わない限り
通常、C++がCより遅くなるということは有りません。
127デフォルトの名無しさん
2019/07/28(日) 00:37:20.66ID:YxeZH1gr Embedded C++みたいなこと言ってんな
128デフォルトの名無しさん
2019/08/05(月) 22:51:14.97ID:DMRdHfR+ これからC++勉強しようと思うのですが、
開発環境は何を入れるのがおすすめですか?
Visual Studio Communityが無料で良いのでしょうか
他におすすめあれば御紹介願います
あと、C++勉強に当たっておすすめ定番の本あれば
ご教示ください
開発環境は何を入れるのがおすすめですか?
Visual Studio Communityが無料で良いのでしょうか
他におすすめあれば御紹介願います
あと、C++勉強に当たっておすすめ定番の本あれば
ご教示ください
129デフォルトの名無しさん
2019/08/05(月) 22:55:30.85ID:vqN4pUkV 今時ならUbuntu入れてatomなりvs codeなり入れりゃいいんじゃないかな
純粋にc++の勉強したいなら
VCは独自仕様が酷すぎるから言語学習には不向き
純粋にc++の勉強したいなら
VCは独自仕様が酷すぎるから言語学習には不向き
130デフォルトの名無しさん
2019/08/05(月) 23:01:28.37ID:nblSLoEW VCの独自仕様が気に入らんのならVS2019で対応したLLVMツールセットを使えばいい
初心者にIDEなしはモチベ維持が困難
初心者にIDEなしはモチベ維持が困難
131デフォルトの名無しさん
2019/08/05(月) 23:18:05.24ID:f20npl5p 独自仕様ならGCC、未実装ならVCってかんじだがどちらも独自仕様はオプションで制御できる
まあWindows環境でやるならVisualStudio使わないのはマゾ
おすすめできる定番の本についてはどれも一長一短だし
テンプレートの利用くらいまで扱ってればとりあえずなんでもいいと思う
まあWindows環境でやるならVisualStudio使わないのはマゾ
おすすめできる定番の本についてはどれも一長一短だし
テンプレートの利用くらいまで扱ってればとりあえずなんでもいいと思う
132デフォルトの名無しさん
2019/08/05(月) 23:29:17.63ID:vqN4pUkV vcのは独自と言っても、なぜかコンパイルが通らない
なぜかコンパイルが通る
なぜかリンクエラーが起こる
みたいなあまり明文化されていないのだから面倒
structとclassがリンカで別物ってのは酷すぎる
なぜかコンパイルが通る
なぜかリンクエラーが起こる
みたいなあまり明文化されていないのだから面倒
structとclassがリンカで別物ってのは酷すぎる
133デフォルトの名無しさん
2019/08/05(月) 23:45:44.34ID:4w7A00FF >>132その最後の行の話、はじめて聞いたけど参考になるサイトとかあったら教えて。
134デフォルトの名無しさん
2019/08/05(月) 23:49:09.91ID:vqN4pUkV ググればいくらでも出てくるがとりあえず一番上を貼っておく
https://stackoverflow.com/questions/33483623/visual-c-2015-linker-error-when-forward-declaring-a-struct-as-class
https://stackoverflow.com/questions/33483623/visual-c-2015-linker-error-when-forward-declaring-a-struct-as-class
135デフォルトの名無しさん
2019/08/06(火) 00:52:13.35ID:pONItBAd コマンドライン引数ってのが何を出来るものなのか全く分からないのですが、何が出来るものなんでしょうか?
書き方はまー分かったんですけど、空のメモ帳をドラッグ&ドロップすると意味あるみたいなこと書いてあるけど何も起こりません…
使用環境Visualstudio2019 で見ているサイトhttp:ああwisdom.sakura.ne.jpあprogramming/c/c32.htmlです
書き方はまー分かったんですけど、空のメモ帳をドラッグ&ドロップすると意味あるみたいなこと書いてあるけど何も起こりません…
使用環境Visualstudio2019 で見ているサイトhttp:ああwisdom.sakura.ne.jpあprogramming/c/c32.htmlです
136デフォルトの名無しさん
2019/08/06(火) 11:26:59.34ID:qIlFvc4N std::optionalが内部に値を保持する仕組みについてお聞きしたいことがあります
現在いくつかのサイトを巡り、値を保持するためにstd::aligned_storageで確保した領域に配置構文newで値を書き込んでいることがわかりました
このaligned_storageを使った場合に、std::vectorなどのサイズが可変な値が格納されるとどういった挙動になるのでしょうか
vectorの要素数が増えてサイズが大きくなると、alinged_storageで確保したサイズを超えてしまったりしないのでしょうか
現在いくつかのサイトを巡り、値を保持するためにstd::aligned_storageで確保した領域に配置構文newで値を書き込んでいることがわかりました
このaligned_storageを使った場合に、std::vectorなどのサイズが可変な値が格納されるとどういった挙動になるのでしょうか
vectorの要素数が増えてサイズが大きくなると、alinged_storageで確保したサイズを超えてしまったりしないのでしょうか
137デフォルトの名無しさん
2019/08/06(火) 14:04:02.23ID:AX25/xXa 根本的な部分の理解が足りていない気がするが直接の答えとしてはvectorのサイズは増えないので問題ない。
vectorが管理しているバッファのサイズは増える。
vectorはポインタを持っているだけ。
vectorが管理しているバッファのサイズは増える。
vectorはポインタを持っているだけ。
138デフォルトの名無しさん
2019/08/06(火) 21:09:46.35ID:qIlFvc4N >>137
なるほど、的確な解答ありがとうございます
なるほど、的確な解答ありがとうございます
139デフォルトの名無しさん
2019/08/07(水) 00:38:52.58ID:pFHPYbJE VS2019でchar* name="ABC"みたいにやると
cont char*値を使用してchar*のエンティティを初期化することはできません。とエラーが出るんですけど
どうしたら実行できます?
ググったらcharの前にconst付けると直るみたいですけどこの例だと治りませんでした
http://ideone.com/YyFypJ
cont char*値を使用してchar*のエンティティを初期化することはできません。とエラーが出るんですけど
どうしたら実行できます?
ググったらcharの前にconst付けると直るみたいですけどこの例だと治りませんでした
http://ideone.com/YyFypJ
140デフォルトの名無しさん
2019/08/07(水) 00:46:34.02ID:nHUnBCAO const char* name;
ってしてもダメなの?
ってしてもダメなの?
141デフォルトの名無しさん
2019/08/07(水) 04:58:05.08ID:pFHPYbJE142デフォルトの名無しさん
2019/08/07(水) 05:16:54.31ID:v77Wmobb 構造体だから
143デフォルトの名無しさん
2019/08/07(水) 05:19:14.35ID:v77Wmobb あるいはそれを許可するコンパイルオプション付けるか
144デフォルトの名無しさん
2019/08/07(水) 08:50:49.29ID:F5bbfK8A 文字列リテラルの型はconstな文字列の配列です
https://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#encoding-scheme
https://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#encoding-scheme
145デフォルトの名無しさん
2019/08/07(水) 10:29:55.43ID:5hdKKXYg >>141
それをやってダメだったときのエラーメッセージを張ろう
それをやってダメだったときのエラーメッセージを張ろう
146デフォルトの名無しさん
2019/08/07(水) 10:45:14.88ID:9Ff0DYo3 >>139
C/C++の言語仕様的には
const char *name="ABC";
で行ける可能性は高いんですが、分かりやすさのためには、
static const char szName[] ="ABC"; // szName[4] という配列を "ABC",0 で初期化。
const char *name =&szName[0];
とするものお勧めです。
C/C++の言語仕様的には
const char *name="ABC";
で行ける可能性は高いんですが、分かりやすさのためには、
static const char szName[] ="ABC"; // szName[4] という配列を "ABC",0 で初期化。
const char *name =&szName[0];
とするものお勧めです。
147デフォルトの名無しさん
2019/08/07(水) 11:36:34.89ID:Io4EJaZl 少なくとも>>139のリンクにあるコードはchar*にリテラルを入れようとしてるのでNG
constをつけても駄目なのは生成後に代入しようとしてるから
てか意味もなくグローバルスコープの構造体とかやめろ
constをつけても駄目なのは生成後に代入しようとしてるから
てか意味もなくグローバルスコープの構造体とかやめろ
148デフォルトの名無しさん
2019/08/07(水) 17:26:37.26ID:Io4EJaZl あと特に理由がないなら文字列はstd::stringを使うべき
C言語じゃないんだから
C言語じゃないんだから
149デフォルトの名無しさん
2019/08/07(水) 17:27:18.45ID:Io4EJaZl ↑C言語じゃないんだったら
150デフォルトの名無しさん
2019/08/08(木) 08:01:13.41ID:kZ+216R/ >>147
構造体メンバに
const char *name;
と書いていて、構造体を生成後に後から name メンバに
Cの文字列リテラルの先頭アドレスを代入することは、
C/C++の言語仕様的にはいけるはずです。
なぜなら、xxx.name のように書いた場合、コンパイラの内部的には
const char* 型の左辺値(代入先)が有るのと同じように扱われるので、
ローカル変数に const char *aaa; aaa = "xxx"; と書いた場合と変わらなく
なるはずですから、C/C++ の言語仕様的には。
構造体メンバに
const char *name;
と書いていて、構造体を生成後に後から name メンバに
Cの文字列リテラルの先頭アドレスを代入することは、
C/C++の言語仕様的にはいけるはずです。
なぜなら、xxx.name のように書いた場合、コンパイラの内部的には
const char* 型の左辺値(代入先)が有るのと同じように扱われるので、
ローカル変数に const char *aaa; aaa = "xxx"; と書いた場合と変わらなく
なるはずですから、C/C++ の言語仕様的には。
151デフォルトの名無しさん
2019/08/08(木) 16:00:04.26ID:uMVCdDWb 独自のクラスに比較演算子==を実装する時、クラス内に定義するのとグローバルで定義するのとでは、実装の仕方以外に違いがあるのでしょうか?
また、例えば独自クラスとintの比較演算子==を実装する場合は、左辺にintがある場合と右辺にintがある場合の二つを用意する必要があるのでしょうか
ちなみに使用しているのはC++11です
また、例えば独自クラスとintの比較演算子==を実装する場合は、左辺にintがある場合と右辺にintがある場合の二つを用意する必要があるのでしょうか
ちなみに使用しているのはC++11です
152デフォルトの名無しさん
2019/08/08(木) 16:20:50.94ID:5ZN2ymvH それくらいすぐ作れるんだからやってみればいいのでは
153デフォルトの名無しさん
2019/08/08(木) 16:35:41.72ID:uMVCdDWb >>152
これって自分でやったところで解決できる質問なのでしょうか?
もちろん既に自分で実装していますが、自分で使ってみた感じではクラスでもグローバルでも一切の違いがないと「思います」
左辺と右辺のintについても、わざわざ2つの演算子を定義するしか方法がないと「思います」
これって自分でやったところで解決できる質問なのでしょうか?
もちろん既に自分で実装していますが、自分で使ってみた感じではクラスでもグローバルでも一切の違いがないと「思います」
左辺と右辺のintについても、わざわざ2つの演算子を定義するしか方法がないと「思います」
154デフォルトの名無しさん
2019/08/08(木) 23:38:32.45ID:gitRBAeC クラス内に定義するのとグローバルで定義するのとってどういう意味でだ?
クラスのメンバ関数と普通の関数として定義するのとってこと?
あるいはクラスのstaticメンバ関数と普通の関数?
そういうのとは違ってクラス定義の中にメンバ関数の定義も書くのと
クラス定義の中では宣言だけで外に定義を書くのとってこと?
クラスのメンバ関数と普通の関数として定義するのとってこと?
あるいはクラスのstaticメンバ関数と普通の関数?
そういうのとは違ってクラス定義の中にメンバ関数の定義も書くのと
クラス定義の中では宣言だけで外に定義を書くのとってこと?
155デフォルトの名無しさん
2019/08/09(金) 01:10:13.49ID:QHhCdgXb >>151
クラス内に定義すると当然メンバー関数扱いなるのでprivateメンバーにアクセスできるが、左辺を自クラス、右辺をintにoperatorしか定義できない。
クラス外に定義すると、そのままではprivateメンバーにアクセス出来ないが、左辺、右辺どっちでも自由に定義できる。
クラス内に定義すると当然メンバー関数扱いなるのでprivateメンバーにアクセスできるが、左辺を自クラス、右辺をintにoperatorしか定義できない。
クラス外に定義すると、そのままではprivateメンバーにアクセス出来ないが、左辺、右辺どっちでも自由に定義できる。
156デフォルトの名無しさん
2019/08/09(金) 01:23:46.70ID:QHhCdgXb >>151
相手がintの場合はわざわざoperator==を定義しなくても、intへの型変換operatorを定義すれば勝手に変換してくれるので、そっちの方が楽だと思う。
相手がintの場合はわざわざoperator==を定義しなくても、intへの型変換operatorを定義すれば勝手に変換してくれるので、そっちの方が楽だと思う。
157デフォルトの名無しさん
2019/08/09(金) 04:08:33.63ID:P26n3T2n158デフォルトの名無しさん
2019/08/09(金) 11:09:20.14ID:0rjrOlB6159デフォルトの名無しさん
2019/08/10(土) 01:46:44.99ID:07GKNAvB 質問ですがリフレクションってのは何ナノですか?
これがないのがC++の欠点って言われてるそうですが
これがないのがC++の欠点って言われてるそうですが
160デフォルトの名無しさん
2019/08/10(土) 02:13:52.05ID:0AyH8q+k ググって何がわからなかったのか書けよ
そういう気配り謙虚さがないからお前は伸びないんだよ
そういう気配り謙虚さがないからお前は伸びないんだよ
161デフォルトの名無しさん
2019/08/11(日) 09:19:19.57ID:tY3BhpyE162デフォルトの名無しさん
2019/08/12(月) 16:51:27.60ID:dO9cEAMi >>151
それよりもその定義をどのファイルに置いとくかっていうディレクトリ構成のが重要。
それよりもその定義をどのファイルに置いとくかっていうディレクトリ構成のが重要。
163デフォルトの名無しさん
2019/08/12(月) 16:56:28.87ID:FzF2lTUV ある型TでT[]とT*とTって何が違うの??
164デフォルトの名無しさん
2019/08/13(火) 00:33:44.36ID:DG2S/APd T[]は配列、Tなものが並んだもの
T*はポインタ、Tなものを指すもの
Tは、Tそのものとしか
配列は随所でポインタに変換されるから混同するのもわからんでもないが
T*はポインタ、Tなものを指すもの
Tは、Tそのものとしか
配列は随所でポインタに変換されるから混同するのもわからんでもないが
165デフォルトの名無しさん
2019/08/13(火) 01:11:53.36ID:7xRhzmxz じゃあ配列を関数の実引数で与えるときに[]…って書かないで*ってするのはなんで??
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★6 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 【野球】野球の未来に危機感「マイナースポーツになる」 宮本慎也氏が開催…学童大会 [尺アジ★]
- 中国「捜索レーダー起動は各国の通常の手法」 火器管制用か回答せず [蚤の市★]
- 【訃報】声優・西村知道さん死去 「SLAM DUNK」安西先生役 9月に体調不良のため一時休業 [少考さん★]
- 三角形はカッコいい
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- みなみけ三姉妹誰が一番好き?
- 俺はヤンキーだから
- 【速報】高市早苗、起床 [779938112]
- ぬるぽ
