C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part148
https://mevius.5ch.net/test/read.cgi/tech/1580471646/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
C++相談室 part149
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/02/18(火) 06:19:41.54ID:xvjipUWj502デフォルトの名無しさん
2020/03/03(火) 12:52:22.33ID:GzyUVdF6 >>489
それはgccのバグに思える。
それはgccのバグに思える。
503デフォルトの名無しさん
2020/03/03(火) 12:59:47.46ID:0/2hhSYY バグじゃないぞ
これがバグだったら最適化にかなりの制限がかかってしまう
strict aliasing ruleでググれ
これがバグだったら最適化にかなりの制限がかかってしまう
strict aliasing ruleでググれ
504デフォルトの名無しさん
2020/03/03(火) 13:01:57.30ID:GzyUVdF6 >>503
最適化しない場合とした場合とで結果が変わってくるのは駄目な最適化。
最適化しない場合とした場合とで結果が変わってくるのは駄目な最適化。
505デフォルトの名無しさん
2020/03/03(火) 13:04:15.59ID:0/2hhSYY だからググれって
鬼の首を取ったかのように叩く奴が出てくる前に教えてやってんのにw
鬼の首を取ったかのように叩く奴が出てくる前に教えてやってんのにw
506はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 13:05:53.55ID:WsWEE8rZ >>499
肝心なことが漏れてた。 すまぬ。
C++17 だと 4.4 の脚注に
> The number of bits in a byte is reported by the macro CHAR_BIT in the header <climits>
とあって、バイトとは char の大きさのことだというのが C++ での考え方だと思っていい。
C11 だと 5.2.4.2.1 の CHAR_BIT の説明のところに
> Their implementation-defined values shall be equal or greater in agnitude
> (absolute value) to those shown, with the same sign.
>
> - number of bits for smallest object that is not a bit-field (byte)
> CHAR_BIT 8
という言い回しがあって、 CHAR_BIT は 8 以上であればいい (8 キッカリとは限らない) と解釈できる。
それと、ポインタを持てる単位がバイトだということが示唆されているとも言える。
肝心なことが漏れてた。 すまぬ。
C++17 だと 4.4 の脚注に
> The number of bits in a byte is reported by the macro CHAR_BIT in the header <climits>
とあって、バイトとは char の大きさのことだというのが C++ での考え方だと思っていい。
C11 だと 5.2.4.2.1 の CHAR_BIT の説明のところに
> Their implementation-defined values shall be equal or greater in agnitude
> (absolute value) to those shown, with the same sign.
>
> - number of bits for smallest object that is not a bit-field (byte)
> CHAR_BIT 8
という言い回しがあって、 CHAR_BIT は 8 以上であればいい (8 キッカリとは限らない) と解釈できる。
それと、ポインタを持てる単位がバイトだということが示唆されているとも言える。
507デフォルトの名無しさん
2020/03/03(火) 13:08:55.41ID:GzyUVdF6 >>491
charのbit数は決まってないが、バイトはコンピュータ用語として8バイトと決まっているはず。
charのbit数は決まってないが、バイトはコンピュータ用語として8バイトと決まっているはず。
508デフォルトの名無しさん
2020/03/03(火) 13:10:50.46ID:GzyUVdF6 >>506
多分、
「The number of bits in a byte is reported by the macro CHAR_BIT in the header <climits>」
は、書き間違いで、正しくは、
The number of bits in a char is reported by the macro CHAR_BIT in the header <climits>
だと思われる。
多分、
「The number of bits in a byte is reported by the macro CHAR_BIT in the header <climits>」
は、書き間違いで、正しくは、
The number of bits in a char is reported by the macro CHAR_BIT in the header <climits>
だと思われる。
509デフォルトの名無しさん
2020/03/03(火) 13:17:56.62ID:GzyUVdF6 >>507
そうか、歴史的には、byteが7bitだったこともあったんだね。
そうか、歴史的には、byteが7bitだったこともあったんだね。
510はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 13:32:49.23ID:WsWEE8rZ >>507
これな。
https://ja.wikipedia.org/wiki/IEC_80000-13
C++ が参照規格として示してないので採用してないんでしょ。
まあそんなこと言ったら英単語の意味だってどうとでもとりようがあったりするからアレだけど、
あらためて C++ の規格の中でバイトについて書いてある以上は C++ 世界では
「コンピュータ用語としてのバイト」を採用してないと解釈するのが自然。
将来的には変更されることもあるかもしれんけども。
>>508
C++20 のドラフトでもそのままなので本気で間違ってると思うなら指摘してあげればいいんじゃね?
>>509
9bit のマシンもあったらしいよ。
https://ja.wikipedia.org/wiki/ACOS-6
これな。
https://ja.wikipedia.org/wiki/IEC_80000-13
C++ が参照規格として示してないので採用してないんでしょ。
まあそんなこと言ったら英単語の意味だってどうとでもとりようがあったりするからアレだけど、
あらためて C++ の規格の中でバイトについて書いてある以上は C++ 世界では
「コンピュータ用語としてのバイト」を採用してないと解釈するのが自然。
将来的には変更されることもあるかもしれんけども。
>>508
C++20 のドラフトでもそのままなので本気で間違ってると思うなら指摘してあげればいいんじゃね?
>>509
9bit のマシンもあったらしいよ。
https://ja.wikipedia.org/wiki/ACOS-6
511デフォルトの名無しさん
2020/03/03(火) 13:48:53.72ID:4ZFJ43jO512はちみつ餃子 ◆8X2XSCHEME
2020/03/03(火) 14:19:12.58ID:WsWEE8rZ >>511
もう POD という区分が適切な場面はあんまりないから、という意味のことが書いてあるっぽい。
https://botondballo.wordpress.com/2017/11/20/trip-report-c-standards-meeting-in-albuquerque-november-2017/
もう POD という区分が適切な場面はあんまりないから、という意味のことが書いてあるっぽい。
https://botondballo.wordpress.com/2017/11/20/trip-report-c-standards-meeting-in-albuquerque-november-2017/
513デフォルトの名無しさん
2020/03/03(火) 14:41:53.95ID:ctFzSosi trivialは生成解体の話で、standard-layoutはデータ配置の話だから
PODってのはレイヤーの違う性質が混ざってて規格に使う用語としては筋悪なんですわ
PODってのはレイヤーの違う性質が混ざってて規格に使う用語としては筋悪なんですわ
514デフォルトの名無しさん
2020/03/03(火) 16:26:35.30ID:GzyUVdF6 >>510
>C++20 のドラフトでもそのままなので本気で間違ってると思うなら指摘してあげればいいんじゃね?
annotated C++ reference manual, 3.2.1c Integral Limits には、
CHAR_BIT 8 maximum bits in a byte
とあった。
>C++20 のドラフトでもそのままなので本気で間違ってると思うなら指摘してあげればいいんじゃね?
annotated C++ reference manual, 3.2.1c Integral Limits には、
CHAR_BIT 8 maximum bits in a byte
とあった。
515デフォルトの名無しさん
2020/03/03(火) 16:39:36.38ID:GzyUVdF6 >>514
ANSI/ISO, Standard C プログラマーズ リファレンス
P.J. Plauger / Jim Brodie, 日本語訳, ASCII
第一部 第一章 基本整数型 には、
--------------------------------------------------------
表記, 最小範囲, 表現における制限
--------------------------------------------------------
char, [0,128), signed char か unsigned char のどちらかと等しい。
signed char, (-128,128), 少なくとも 8bit 精度の符号付整数
unsigned char, [0, 256), signed charと同じサイズ。負の数は無い。
--------------------------------------------------------
第二部 第二章 標準ヘッダ <limit.h> には、
--------------------------------------------------------
CHAR_BIT
#define CHAR_BIT <#if 式 ≧ 8>
このマクロは、char 型のデータオブジェクトを表現するのに使われているビット数の最大値と置き換わる。
--------------------------------------------------------
とある。
後半は >>514 とは異なり、byte ではなく、char となっている。
ANSI/ISO, Standard C プログラマーズ リファレンス
P.J. Plauger / Jim Brodie, 日本語訳, ASCII
第一部 第一章 基本整数型 には、
--------------------------------------------------------
表記, 最小範囲, 表現における制限
--------------------------------------------------------
char, [0,128), signed char か unsigned char のどちらかと等しい。
signed char, (-128,128), 少なくとも 8bit 精度の符号付整数
unsigned char, [0, 256), signed charと同じサイズ。負の数は無い。
--------------------------------------------------------
第二部 第二章 標準ヘッダ <limit.h> には、
--------------------------------------------------------
CHAR_BIT
#define CHAR_BIT <#if 式 ≧ 8>
このマクロは、char 型のデータオブジェクトを表現するのに使われているビット数の最大値と置き換わる。
--------------------------------------------------------
とある。
後半は >>514 とは異なり、byte ではなく、char となっている。
516デフォルトの名無しさん
2020/03/03(火) 16:46:23.12ID:GzyUVdF6 type punning について、このスレで議論されていた union の場合は、「適合コード」の例とされている:
https://www.jpcert.or.jp/m/sc-rules/c-exp39-c.html
適合コード
以下のコード例では、オブジェクトの有効な型と互換性のある型を持つ union 型を使用している。
union {
short a[2];
int i;
} u;
u.a[0]=0x1111;
u.a[1]=0x1111;
u.i = 0x22222222;
printf("%x %x\n", u.a[0], u.a[1]);
このコード例では確実に "2222 2222" と出力される。
https://www.jpcert.or.jp/m/sc-rules/c-exp39-c.html
適合コード
以下のコード例では、オブジェクトの有効な型と互換性のある型を持つ union 型を使用している。
union {
short a[2];
int i;
} u;
u.a[0]=0x1111;
u.a[1]=0x1111;
u.i = 0x22222222;
printf("%x %x\n", u.a[0], u.a[1]);
このコード例では確実に "2222 2222" と出力される。
517デフォルトの名無しさん
2020/03/03(火) 16:56:05.32ID:GzyUVdF6 union による type punning は、C99やC11では大丈夫になったのではないか。
最後に代入したメンバ以外のメンバからの読み出しは、合法になったようだが。
よく読んでないので分からん:
https://stackoverflow.com/questions/11639947/is-type-punning-through-a-union-unspecified-in-c99-and-has-it-become-specified
最後に代入したメンバ以外のメンバからの読み出しは、合法になったようだが。
よく読んでないので分からん:
https://stackoverflow.com/questions/11639947/is-type-punning-through-a-union-unspecified-in-c99-and-has-it-become-specified
518デフォルトの名無しさん
2020/03/03(火) 16:58:14.25ID:GzyUVdF6 >>517
Finally, one of the changes from C90 to C99 was to remove any restriction on accessing one member of a union when the last store was to a different one.
The rationale was that the behaviour would then depend on the representations of the values.
Since this point is often misunderstood, it might well be worth making it clear in the Standard.
[...]
To address the issue about "type punning", attach a new footnote 78a to the words "named member" in 6.5.2.3#3: 78a
If the member used to access the contents of a union object is not the same as the member last used to store a value in the object,
the appropriate part of the object representation of the value is reinterpreted as an object representation in the new type as described in 6.2.6 (a process sometimes called "type punning").
This might be a trap representation.
Finally, one of the changes from C90 to C99 was to remove any restriction on accessing one member of a union when the last store was to a different one.
The rationale was that the behaviour would then depend on the representations of the values.
Since this point is often misunderstood, it might well be worth making it clear in the Standard.
[...]
To address the issue about "type punning", attach a new footnote 78a to the words "named member" in 6.5.2.3#3: 78a
If the member used to access the contents of a union object is not the same as the member last used to store a value in the object,
the appropriate part of the object representation of the value is reinterpreted as an object representation in the new type as described in 6.2.6 (a process sometimes called "type punning").
This might be a trap representation.
519デフォルトの名無しさん
2020/03/03(火) 20:10:58.79ID:6u3PFyGZ >>515
日本語訳が間違ってる可能性もあるな
日本語訳が間違ってる可能性もあるな
520デフォルトの名無しさん
2020/03/03(火) 21:25:40.77ID:s8qGwiQH >>514
頑なに仕様書読まないのはなぜなのか
頑なに仕様書読まないのはなぜなのか
522デフォルトの名無しさん
2020/03/04(水) 00:45:53.15ID:And/nx/1 C++は間違っているからな
間違いで間違いを正すことはできな
い
間違いで間違いを正すことはできな
い
523デフォルトの名無しさん
2020/03/04(水) 01:36:12.37ID:tHLmVZnX >>515 も仕様書だと思うのだが。
524デフォルトの名無しさん
2020/03/04(水) 08:18:37.27ID:wOgWtFGu それに基づいて作られた製品があればの話だな
525デフォルトの名無しさん
2020/03/04(水) 09:01:59.59ID:obnoKtcJ まあc++の仕様を完全に守ってる実装なんて一つもないしな。
それ確かめるのに工数かかるってどうなん?とは思う。
それ確かめるのに工数かかるってどうなん?とは思う。
526デフォルトの名無しさん
2020/03/04(水) 09:56:46.98ID:0Mjry1zX >>523
それは解説書
それは解説書
527デフォルトの名無しさん
2020/03/04(水) 10:55:23.42ID:wOgWtFGu 仕様を説明していても仕様書かどうかとは別な話だな
528デフォルトの名無しさん
2020/03/04(水) 12:41:56.62ID:tHLmVZnX >>526
実際には、あれは普通の解説書ではなく、コンパイラを実装する人が重宝するようなバッカス記法や決定性オートマトンなどを使って仕様がかなり厳密に書かれた特殊な本。
実際には、あれは普通の解説書ではなく、コンパイラを実装する人が重宝するようなバッカス記法や決定性オートマトンなどを使って仕様がかなり厳密に書かれた特殊な本。
529はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 13:50:02.87ID:BrIasXcf530はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 13:54:01.41ID:BrIasXcf C/C++ の仕様が信用ならんなと思うのは欠陥報告 (Defect Report) の存在だな。
仕様書に書いてないことの確認がとれていても仕様にないとは言い切れない。
把握できるわけないだろ!
仕様書に書いてないことの確認がとれていても仕様にないとは言い切れない。
把握できるわけないだろ!
531デフォルトの名無しさん
2020/03/04(水) 14:10:16.09ID:wOgWtFGu 公文書だかんな
はい発表しましたよ、周知義務よろしく
↑
こういう体質なのは今さら驚いても始まらん
はい発表しましたよ、周知義務よろしく
↑
こういう体質なのは今さら驚いても始まらん
532はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 14:57:19.24ID:BrIasXcf 公文書なら著作権法による保護が及ばないのでそれはそれで利点があるんだけどな。
実際には ISO は民間組織だし、正式な規格票はクソ高価すぎる。
私はドラフトと cpprefjp しか見てないんだけど、買った人いる?
実際には ISO は民間組織だし、正式な規格票はクソ高価すぎる。
私はドラフトと cpprefjp しか見てないんだけど、買った人いる?
533デフォルトの名無しさん
2020/03/04(水) 16:25:27.01ID:tHLmVZnX VS2019 の limits.h のコメントはこうなっている :
#define CHAR_BIT 8 // number of bits in a char
#define CHAR_BIT 8 // number of bits in a char
534はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 16:43:02.53ID:BrIasXcf そうか。
535デフォルトの名無しさん
2020/03/04(水) 16:43:03.91ID:CqUkRGBA VSの想定環境では正しいし何の問題もないな
536デフォルトの名無しさん
2020/03/04(水) 16:58:40.94ID:tHLmVZnX CHAR_BIT なのに本当に「number of bits in a byte」が厳密定義なら、何らかの説明が欲しい所ではある。
ただ、C言語では、charは言語が扱える整数の「最小単位(?)」などと書かれている文書を見たことがある。
だとすれば、Cに高級アセンブラの地位を期待する需要が有る以上、charのbit数がbyteと一致する必要は必ずあるとは思う。
総合的に考えれば、C言語においては、char=byte でなくてはならず、もはやbyteも絶対に8BITでなければならないので
char、byteがいずれも8bit
であることは事実上、必須である。
ただ、C言語では、charは言語が扱える整数の「最小単位(?)」などと書かれている文書を見たことがある。
だとすれば、Cに高級アセンブラの地位を期待する需要が有る以上、charのbit数がbyteと一致する必要は必ずあるとは思う。
総合的に考えれば、C言語においては、char=byte でなくてはならず、もはやbyteも絶対に8BITでなければならないので
char、byteがいずれも8bit
であることは事実上、必須である。
537デフォルトの名無しさん
2020/03/04(水) 17:05:12.53ID:tHLmVZnX Wikipediaの「整数型」のところで、C言語では、何があろうとsizeof(char)は必ず1になると決められており、たとえ16BITワード単位のアーキテクチャでも、CHAR_BIT は 16になるが、sizeof(char)は必ず1になるのだそうだ。
一方、sizeof(X)は、Xの「バイト数」だとされているわけだけど、はっきりいってこんな状況では総合的に考えて、charを8BIT以外には出来ない。
一方、sizeof(X)は、Xの「バイト数」だとされているわけだけど、はっきりいってこんな状況では総合的に考えて、charを8BIT以外には出来ない。
538はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 17:14:44.63ID:BrIasXcf >>536
Rationale の 6.5.3.4 に記述がある。
http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
sizeof(char) は 1 を返す。
たとえこの単位が 36bit 幅であっても。
C 用語の「バイト」はストレージの最小単位であることを意味する。
Rationale の 6.5.3.4 に記述がある。
http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf
sizeof(char) は 1 を返す。
たとえこの単位が 36bit 幅であっても。
C 用語の「バイト」はストレージの最小単位であることを意味する。
539デフォルトの名無しさん
2020/03/04(水) 17:16:32.37ID:tHLmVZnX540はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 17:18:06.36ID:BrIasXcf ポインタを作れる単位を最小単位にするのは理に適ってるんじゃないの。
541デフォルトの名無しさん
2020/03/04(水) 17:20:06.24ID:tHLmVZnX 「bit-field以外のオブジェクトの最小単位」
なわけだから、ポインタが指しうるアドレスの最小単位でもあるわけだ。
言葉が変かも知れないが。
なわけだから、ポインタが指しうるアドレスの最小単位でもあるわけだ。
言葉が変かも知れないが。
542デフォルトの名無しさん
2020/03/04(水) 17:35:08.28ID:obnoKtcJ 気にするような環境にない奴に限ってこういうこと気にするのな。
543デフォルトの名無しさん
2020/03/04(水) 17:39:54.09ID:tHLmVZnX 個人的には、ソース配布してダウンロードした人が各自勝手にコンパイルするようにするようなプログラムを書いたことが無い。
必ずバイナリレベルでテストして十分デバッグ済みだと思ってからバイナリを配布してきたから。
ソース配布文化は別世界。
必ずバイナリレベルでテストして十分デバッグ済みだと思ってからバイナリを配布してきたから。
ソース配布文化は別世界。
544デフォルトの名無しさん
2020/03/04(水) 18:59:40.00ID:Py0/41jA だから何だ
結局何が言いたいんだ
規格が間違ってるって言うならISOのWGに意見書出せよ
情報は歓迎だぞ
結局何が言いたいんだ
規格が間違ってるって言うならISOのWGに意見書出せよ
情報は歓迎だぞ
545デフォルトの名無しさん
2020/03/04(水) 20:23:54.51ID:3yz+4Wbb546デフォルトの名無しさん
2020/03/04(水) 20:40:21.43ID:+mh63BBw まず一生触ることのない環境のことはどうでもいい
547デフォルトの名無しさん
2020/03/04(水) 20:47:19.33ID:wOgWtFGu お、江添きたか
548デフォルトの名無しさん
2020/03/04(水) 21:36:25.82ID:9NgWGcWV >>536
C,C++ はそれぞれずっと前から "byte" を独自定義していて、 2008 年発行の IEC 80000-13 の定義は関係ないんだよ。
(・・・って >507 に書いてあったわ。なんでまだこんなこと言ってるのこの人?)
C,C++ はそれぞれずっと前から "byte" を独自定義していて、 2008 年発行の IEC 80000-13 の定義は関係ないんだよ。
(・・・って >507 に書いてあったわ。なんでまだこんなこと言ってるのこの人?)
549デフォルトの名無しさん
2020/03/04(水) 22:55:14.08ID:InlLUMV0 byteが何者かわからんから、オクテットとか言う呼び方があるのだろう
550デフォルトの名無しさん
2020/03/04(水) 22:56:33.25ID:wOgWtFGu nibble != 4bits ということはあるのかね
551はちみつ餃子 ◆8X2XSCHEME
2020/03/04(水) 23:02:36.78ID:BrIasXcf552デフォルトの名無しさん
2020/03/05(木) 08:23:20.57ID:Hv5fT+Tn c++初心者です
実際現場でよく使われる関数はどんなものがありますか?
実際現場でよく使われる関数はどんなものがありますか?
553デフォルトの名無しさん
2020/03/05(木) 08:31:27.44ID:eBZoUINk begin, end, operator ++, operator !=
554デフォルトの名無しさん
2020/03/05(木) 08:48:57.01ID:maJEmc7K >>553はSTLしか使ったことないアマチュアの発言
555デフォルトの名無しさん
2020/03/05(木) 09:32:08.09ID:eBZoUINk STLだと? 俺はrange-based-forを想定して書いたんだが、気が付かなかったのか?
556デフォルトの名無しさん
2020/03/05(木) 09:35:26.73ID:oibZ2+F1 一緒だよ
557デフォルトの名無しさん
2020/03/05(木) 09:44:32.03ID:tzyiEzvg c++11でregexの正規表現で\sと\Sがエラーになるけど、
全部自分で記述で[ \t\r\n]とかしないといけないですかね?
全部自分で記述で[ \t\r\n]とかしないといけないですかね?
558デフォルトの名無しさん
2020/03/05(木) 10:06:12.56ID:HyVcGvBE >>552
関数セットとしては、やはり伝統的なCのものを使うことが多いんではなかろうか。
ソートや乱数、最大最小値計算、正規表現なんかはC++風のものが好まれる傾向が出始めてるかもしれない。
文字列の一致テストなども、個人的にはCのstrcmp()、_strcmpi()、strncmp()、memcmp() なども結構使ってるけど、若い人の間では std::string の比較機能が好まれているかもしれない。
というかC++から勉強した場合、それしか知らないだけかも知れないが。
文字列表示は、ネットではなぜか cout 系で、cout << "Hello"; のようなものを良くかけるが、
表示する際の16進数と10進数の区別や、表示桁数の指定、float/double値の有効数字桁数の指定、先頭に0を付けるかどうかなどを指定し易いので、古いと言われようが個人的には昔ながらのprintf()が好きだ。
関数セットとしては、やはり伝統的なCのものを使うことが多いんではなかろうか。
ソートや乱数、最大最小値計算、正規表現なんかはC++風のものが好まれる傾向が出始めてるかもしれない。
文字列の一致テストなども、個人的にはCのstrcmp()、_strcmpi()、strncmp()、memcmp() なども結構使ってるけど、若い人の間では std::string の比較機能が好まれているかもしれない。
というかC++から勉強した場合、それしか知らないだけかも知れないが。
文字列表示は、ネットではなぜか cout 系で、cout << "Hello"; のようなものを良くかけるが、
表示する際の16進数と10進数の区別や、表示桁数の指定、float/double値の有効数字桁数の指定、先頭に0を付けるかどうかなどを指定し易いので、古いと言われようが個人的には昔ながらのprintf()が好きだ。
559デフォルトの名無しさん
2020/03/05(木) 10:22:38.04ID:TYdcXopQ マニピュレータを作ることが出来るのでストリームを使ってるだけでは。
560デフォルトの名無しさん
2020/03/05(木) 10:23:41.63ID:TYdcXopQ 若い子は馬鹿なのでストリームを好むキリッって風に見えるのだろか。
561デフォルトの名無しさん
2020/03/05(木) 10:59:35.38ID:HyVcGvBE C++の文字列比較で比較開始位置や最大長さを指定したい場合、
if ( str1.compare(0, 5, "abcdefghijklmn") == 0 )
のように書く必要があるが、Cのstrncmp()だと
if ( strncmp(pszText1, pszText2, 5) == 0 )
と書ける。
後者の方が、比較する2つの文字列1, 文字列2の間にみごとな「対称性」があってとても美しい。
さらに、
C :
if ( strcmp(pszText1, pszText2) == 0 ) // 長さ指定なしの全体比較
if ( strncmp(pszText1, pszText2, 5) == 0 ) // 最大長さ指定有り。
C++のstd::string :
if ( str1 == str2 ) // 長さ指定なしの全体比較
if ( str1.compare(0, 5, str2) == 0 ) // 最大長さ指定有り。
のように、長さ指定が無い場合と有る場合の「対称性」もCの方が高い。
さらに、開始位置と長さを指定する引数の位置が、コンストラクタに置いては
std::string str2("Hello World");
std::string str1(str2, 長さ);
std::string str1(str2, 開始位置, 長さ);
なのに、比較においては
str1.compare(開始位置, 長さ, str2)
のように前後が逆転していて、ここでもまた、STLの文字列操作には「対称性」が無い。
なお、MFCのCStringの場合は、
CString str1, str2;
に対し、以下のように strcmp(), strncmp() に簡単に指定できる :
if ( str1 == str2 ) // 長さ指定なしの全体比較
if ( strcmp(str1, str2) == 0 ) // 長さ指定なしの全体比較
if ( strncmp(str1, str2, 5) == 0 ) // 最大長さ指定有り。
一方、std::string の場合、const char* 型への暗黙変換が出来ず、str.c_str() のように書かないといけないという困った問題がある「かも」知れない。
今のC++でどうなったかは知らない。
if ( str1.compare(0, 5, "abcdefghijklmn") == 0 )
のように書く必要があるが、Cのstrncmp()だと
if ( strncmp(pszText1, pszText2, 5) == 0 )
と書ける。
後者の方が、比較する2つの文字列1, 文字列2の間にみごとな「対称性」があってとても美しい。
さらに、
C :
if ( strcmp(pszText1, pszText2) == 0 ) // 長さ指定なしの全体比較
if ( strncmp(pszText1, pszText2, 5) == 0 ) // 最大長さ指定有り。
C++のstd::string :
if ( str1 == str2 ) // 長さ指定なしの全体比較
if ( str1.compare(0, 5, str2) == 0 ) // 最大長さ指定有り。
のように、長さ指定が無い場合と有る場合の「対称性」もCの方が高い。
さらに、開始位置と長さを指定する引数の位置が、コンストラクタに置いては
std::string str2("Hello World");
std::string str1(str2, 長さ);
std::string str1(str2, 開始位置, 長さ);
なのに、比較においては
str1.compare(開始位置, 長さ, str2)
のように前後が逆転していて、ここでもまた、STLの文字列操作には「対称性」が無い。
なお、MFCのCStringの場合は、
CString str1, str2;
に対し、以下のように strcmp(), strncmp() に簡単に指定できる :
if ( str1 == str2 ) // 長さ指定なしの全体比較
if ( strcmp(str1, str2) == 0 ) // 長さ指定なしの全体比較
if ( strncmp(str1, str2, 5) == 0 ) // 最大長さ指定有り。
一方、std::string の場合、const char* 型への暗黙変換が出来ず、str.c_str() のように書かないといけないという困った問題がある「かも」知れない。
今のC++でどうなったかは知らない。
562デフォルトの名無しさん
2020/03/05(木) 11:41:02.48ID:wTyki8t2564デフォルトの名無しさん
2020/03/05(木) 13:09:53.92ID:HyVcGvBE >>563
ラッパー関数とは関係ない話。
ラッパー関数とは関係ない話。
565デフォルトの名無しさん
2020/03/05(木) 13:22:25.57ID:0hm1XC5v566デフォルトの名無しさん
2020/03/05(木) 13:31:47.82ID:HyVcGvBE >>565
気になるので言っておく。
stream 入出力とは、古くから FILE, fopen, fclose, fgetc, fread などに対して使われていた言葉で、cout/cin 系専用の言葉ではない。
なんでもそうだが、言葉は有名なところで先に使っていた方が優先されるべきだ。
気になるので言っておく。
stream 入出力とは、古くから FILE, fopen, fclose, fgetc, fread などに対して使われていた言葉で、cout/cin 系専用の言葉ではない。
なんでもそうだが、言葉は有名なところで先に使っていた方が優先されるべきだ。
567デフォルトの名無しさん
2020/03/05(木) 13:35:39.19ID:HyVcGvBE >>566
1. Cのstdin, stdout, FILE, fopen, fclose, fgetc, fread 系の関数群のことは、
非常に古くから「Stream I/O」と呼ばれていた。
2. C++ では、「iostream」というような名称で cout/cin 系のクラスが定義された。
後者の事を単に「ストリーム」と言っても1とは区別が付かないのでやめて欲しい。
1. Cのstdin, stdout, FILE, fopen, fclose, fgetc, fread 系の関数群のことは、
非常に古くから「Stream I/O」と呼ばれていた。
2. C++ では、「iostream」というような名称で cout/cin 系のクラスが定義された。
後者の事を単に「ストリーム」と言っても1とは区別が付かないのでやめて欲しい。
568デフォルトの名無しさん
2020/03/05(木) 13:38:39.89ID:eBZoUINk >>556
おい554、range-based-forはコア言語だぞ、断じてSTLではない
そもそも規格票に一言も出てこない用語でイキッてんなよ
俺がアマチュアかどうかも証拠持ってるわけねえよな
寝言は寝て言えタコ助
おい554、range-based-forはコア言語だぞ、断じてSTLではない
そもそも規格票に一言も出てこない用語でイキッてんなよ
俺がアマチュアかどうかも証拠持ってるわけねえよな
寝言は寝て言えタコ助
569デフォルトの名無しさん
2020/03/05(木) 13:39:59.47ID:TYdcXopQ570はちみつ餃子 ◆8X2XSCHEME
2020/03/05(木) 13:41:04.88ID:2gUuzrSw 何を使ってもいいけど、レイヤは切り分けた方がいいと思う。
string を使ってるときは char の配列と混同させて使うべきではないし、
char 配列を使っているなら string のことは忘れた方がいい。
どこがレイヤの境界なのかはっきりさせて。
string を使ってるときは char の配列と混同させて使うべきではないし、
char 配列を使っているなら string のことは忘れた方がいい。
どこがレイヤの境界なのかはっきりさせて。
571デフォルトの名無しさん
2020/03/05(木) 13:41:08.45ID:HyVcGvBE >>565
初めて聞いたが、書式で{1}{2}など C#に似た使い方が出来るが、
逆に、{ や } の記号を簡単にはかけなくなり printf より使いにくくなってしまう。
しかも、{1}{2}が使い易いとは思わない。むしろ%sや%dより混乱する気がする。
しかも標準ライブラリではない。
初めて聞いたが、書式で{1}{2}など C#に似た使い方が出来るが、
逆に、{ や } の記号を簡単にはかけなくなり printf より使いにくくなってしまう。
しかも、{1}{2}が使い易いとは思わない。むしろ%sや%dより混乱する気がする。
しかも標準ライブラリではない。
572デフォルトの名無しさん
2020/03/05(木) 13:41:55.46ID:HyVcGvBE573デフォルトの名無しさん
2020/03/05(木) 13:46:28.70ID:HyVcGvBE574デフォルトの名無しさん
2020/03/05(木) 13:46:40.22ID:TYdcXopQ >>572
もうそんな時代じゃないので。
いまは、CがC++に依存する時代。
C++で書かれたAPIをCから呼び出す。
C++がスクリプト言語のような柔軟性を持ちつつ、しかしシステム言語として使われるのは、Cから呼び出せるからでは。
もうそんな時代じゃないので。
いまは、CがC++に依存する時代。
C++で書かれたAPIをCから呼び出す。
C++がスクリプト言語のような柔軟性を持ちつつ、しかしシステム言語として使われるのは、Cから呼び出せるからでは。
575デフォルトの名無しさん
2020/03/05(木) 13:52:08.63ID:wTyki8t2 c++がスクリプト言語のような柔軟性をもつ?何言ってんの?病気か?
576デフォルトの名無しさん
2020/03/05(木) 13:55:30.86ID:maJEmc7K >>568
言い返すとこはそこでいいのか?w
ちなrange-based forはまだC++に慣れてない初心者に押し付けるほどのものではないし
ましてrange-basedに合わせるためにoperatorの実装を押し付けるのは論外
ドヤりたいだけの初心者は黙ってろマジ迷惑だから
言い返すとこはそこでいいのか?w
ちなrange-based forはまだC++に慣れてない初心者に押し付けるほどのものではないし
ましてrange-basedに合わせるためにoperatorの実装を押し付けるのは論外
ドヤりたいだけの初心者は黙ってろマジ迷惑だから
577デフォルトの名無しさん
2020/03/05(木) 13:59:58.25ID:HyVcGvBE >>574
coutやstd::stringが使い易いなら誰もCでやろうとは思わないが、現実にはCの方が便利だから
あくまでも使いにくいそれらを使おうとするとのは、今のネットは新しい情報だけが上に来てしまうため、C++しか知らない人が多いためだ。
coutやstd::stringが使い易いなら誰もCでやろうとは思わないが、現実にはCの方が便利だから
あくまでも使いにくいそれらを使おうとするとのは、今のネットは新しい情報だけが上に来てしまうため、C++しか知らない人が多いためだ。
578デフォルトの名無しさん
2020/03/05(木) 14:00:13.40ID:0hm1XC5v579デフォルトの名無しさん
2020/03/05(木) 14:00:44.50ID:HyVcGvBE >>577
一行目の「だから」の直後に「。」が抜けていた。
一行目の「だから」の直後に「。」が抜けていた。
580デフォルトの名無しさん
2020/03/05(木) 14:01:43.36ID:HyVcGvBE581デフォルトの名無しさん
2020/03/05(木) 14:10:16.89ID:TYdcXopQ582デフォルトの名無しさん
2020/03/05(木) 14:11:08.23ID:eBZoUINk >>576
現場でよく使われる関数は何かと尋ねられて
すぐ思い当たるものを正直に述べたのが
初心者に押しつけたように見えるのは
おまえの目か頭のどちらかがおかしいからだ
いや両方か?
C++11に付いていけず置いてかれ
C++03でドヤりたいだけなアウトカーストこそ
マトモな初心者に触るなアホが伝染るから
現場でよく使われる関数は何かと尋ねられて
すぐ思い当たるものを正直に述べたのが
初心者に押しつけたように見えるのは
おまえの目か頭のどちらかがおかしいからだ
いや両方か?
C++11に付いていけず置いてかれ
C++03でドヤりたいだけなアウトカーストこそ
マトモな初心者に触るなアホが伝染るから
583デフォルトの名無しさん
2020/03/05(木) 14:12:52.64ID:maJEmc7K マジでプロでもフリーソフト開発してるアマチュアでもいいから実際の開発に使ってる人(と初心者)専用の相談スレがあった方がいいかもな
開発全くしてない人間でも別に好きにすればいいが、ここはプロや経験長い人にマウント取りたいだけのクソバカが多過ぎる(しかもそれに初心者が騙されて右往左往する)
まぁその役割は初心者スレがすでにある程度担ってんだろうけど
開発全くしてない人間でも別に好きにすればいいが、ここはプロや経験長い人にマウント取りたいだけのクソバカが多過ぎる(しかもそれに初心者が騙されて右往左往する)
まぁその役割は初心者スレがすでにある程度担ってんだろうけど
584デフォルトの名無しさん
2020/03/05(木) 14:13:34.58ID:maJEmc7K >>582
アマチュアで初心者でドヤりたいだけ、ってのは否定しないのかwwww
アマチュアで初心者でドヤりたいだけ、ってのは否定しないのかwwww
585デフォルトの名無しさん
2020/03/05(木) 14:16:27.96ID:TYdcXopQ 乱数とかCライブラリでは辛すぎる。
586デフォルトの名無しさん
2020/03/05(木) 14:16:37.51ID:eBZoUINk >>584
はあ? 俺がアマチュアという事実無根の誹謗中傷をしたことを否定しないのはおまえだろ
はあ? 俺がアマチュアという事実無根の誹謗中傷をしたことを否定しないのはおまえだろ
587デフォルトの名無しさん
2020/03/05(木) 14:17:44.84ID:eBZoUINk 嘘つき野郎と日本語で言っても非難の度合いが弱すぎるので英語でLIAR!!
588デフォルトの名無しさん
2020/03/05(木) 14:17:54.10ID:TYdcXopQ 仕様に「任意の」とついたら、もうCでは拷問になる。
CIA真っ青級の。
CIA真っ青級の。
589デフォルトの名無しさん
2020/03/05(木) 14:18:57.32ID:TYdcXopQ めんどくさいからそろそろ天才がどうたらいういつもの結論行って。
590デフォルトの名無しさん
2020/03/05(木) 14:20:20.54ID:TYdcXopQ Networking TSが入れば追いついてこれるものなど居ない。
591デフォルトの名無しさん
2020/03/05(木) 14:21:04.08ID:wTyki8t2 江添に影響されたバカが増えたよな。
ああいうまともにコード書いてないで知ったかするカス態度はほんと害悪だわ。
ああいうまともにコード書いてないで知ったかするカス態度はほんと害悪だわ。
592デフォルトの名無しさん
2020/03/05(木) 14:23:28.86ID:eBZoUINk 生データからノイズを除去し有益な情報だけを抽出できないやつに江添の文面は無理
593デフォルトの名無しさん
2020/03/05(木) 14:26:52.95ID:maJEmc7K まぁC++専門のライター自身がC++に変な幻想抱いてるしね
スクリプト言語の代わりになったって仕方ないのに
むしろC++にそのように振る舞わせるためにユーザーがアホほどコスト掛けなきゃいけなくなるという
スクリプト言語の代わりになったって仕方ないのに
むしろC++にそのように振る舞わせるためにユーザーがアホほどコスト掛けなきゃいけなくなるという
594デフォルトの名無しさん
2020/03/05(木) 14:32:04.59ID:TYdcXopQ595デフォルトの名無しさん
2020/03/05(木) 14:32:11.09ID:wTyki8t2 ただ新しい言語をなぜやるかの理由の一つとして
年上にマウントとるためってのは実際大きいんだろうなと思う。
これは他言語でもそうだし、昔からそう。
この点についてこの業界は50年以上全く解決されてない。
年上にマウントとるためってのは実際大きいんだろうなと思う。
これは他言語でもそうだし、昔からそう。
この点についてこの業界は50年以上全く解決されてない。
596デフォルトの名無しさん
2020/03/05(木) 14:33:02.32ID:TYdcXopQ C++でワンライナー書けるようになったら、初心者脱出。
597デフォルトの名無しさん
2020/03/05(木) 14:37:10.41ID:LYrzkUWd >>574
cがc++に依存するって何のこと言ってる?
cがc++に依存するって何のこと言ってる?
598デフォルトの名無しさん
2020/03/05(木) 14:41:02.50ID:eBZoUINk 俺が6800のマシン語やり始めた頃
ジジイたちはPCなんてオモチャとバカにしてたから
マウント取りたきゃいつでも取れてたが
そんなパンピーが考えそうなくだらねえことには興味なかった
ジジイたちはPCなんてオモチャとバカにしてたから
マウント取りたきゃいつでも取れてたが
そんなパンピーが考えそうなくだらねえことには興味なかった
599デフォルトの名無しさん
2020/03/05(木) 14:45:43.10ID:TYdcXopQ C++を使いこなせないと老害の始まり。
600デフォルトの名無しさん
2020/03/05(木) 15:16:05.18ID:maJEmc7K601デフォルトの名無しさん
2020/03/05(木) 15:17:50.50ID:TYdcXopQ URL見て気が付いてほしかったが。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【J SPORTS】FIFA U-17ワールドカップ ★9
- とらせん IPあり
- 巨専】
- こいせん 全レス転載禁止
- 侍ジャパンシリーズ2025「日本vs韓国」その12
- 【ATP】テニス総合実況スレ2025 Part 211【WTA】
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- 米シンクタンク「アメリカは台湾問題で"あいまい戦略"を取っている。高市早苗はこの方針から逸脱している」 [603416639]
- 【高市早苗】バス会社、中国からのキャンセルで12月で2000万円~3000万円の損失へ [115996789]
- かしこいワンコっていうVtuberの子知ってる?
- カレーライスぐちゃぐちゃに混ぜる奴🤣
- にゃんこ大戦争やってるやついる?
