[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2ch.scのread.cgiへ]
Update time : 11/30 09:15 / Filesize : 250 KB / Number-of Response : 770
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part166



1 名前:sage [2025/04/26(土) 10:34:58.41 ID:pbPDl6lv0.net]
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part165
https://mevius.5ch.net/test/read.cgi/tech/1698705458/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

736 名前:デフォルトの名無しさん mailto:sage [2025/11/13(木) 23:07:03.58 ID:qvmNyT2p0.net]
そもそも所有権自分で保持してるメンバがもともとT&ってことはないだろ
どっか遠くのオブジェクトを見えるようにしてるだけでしょ?
(それはそれで設計的に焦げ臭いけど置いとく)

737 名前:デフォルトの名無しさん [2025/11/13(木) 23:07:46.30 ID:/tchf03X0.net]
もしくはunique_ptrをunique_refでラップしてしまうのが楽か

738 名前:デフォルトの名無しさん [2025/11/13(木) 23:10:58.33 ID:/tchf03X0.net]
>>736
たまにある
外部リソース(たとえばファイルハンドル)を一時的にクラスに保持して使いやすくするとか
なんにせよ寿命を明示的に管理しておかないと後でやばいことになる

739 名前:デフォルトの名無しさん mailto:sage [2025/11/13(木) 23:14:39.55 ID:qvmNyT2p0.net]
>>738
ファイルハンドルだとして、それを管理するクラスがファイルハンドルの値自体を持たずにヨソに置いて参照するのはなぜ?
やっぱり意味がわからない

740 名前:はちみつ餃子 mailto:sage [2025/11/13(木) 23:20:38.76 ID:bJCWdXAy0.net]
>>732
UB になる。
ポインタと違って参照自体は無効を表現できないのが C++ の基本ルールであり、 reference_wrapper でもそれは同じ。
それでもあえてやるなら適当にダミーのオブジェクトを作っておいてそれを参照していたら無効ということにするというようなことをできなくはないが……それはそれでちょっと不恰好だよね。

741 名前:デフォルトの名無しさん [2025/11/13(木) 23:22:41.52 ID:/tchf03X0.net]
>>739
クラス内部でちゃんと管理するのがいいんだけど時には関数内クラスを定義してちょっとしたことを行うこともある(かも)
その時には所有権を一時的にでも委譲しなきゃならなくなる

742 名前:デフォルトの名無しさん mailto:sage [2025/11/13(木) 23:30:06.73 ID:qvmNyT2p0.net]
>>741
ハンドルは外部で持ったままで、その関数内クラスにはハンドルの参照を渡す(関数内クラスの参照メンバを外部のハンドルで初期化する)って言ってる?それ委譲とは言わないよ
委譲したからにはそのリソースはその関数内クラスの消滅とともに消えないといけないけど、そうなったら外部で持ってたハンドルの実体はどうなるの?
どんなケースを想定してるのか全然わかんない

743 名前:デフォルトの名無しさん mailto:sage [2025/11/14(金) 12:19:28.56 ID:YW3kWFexM.net]
>>740
までもnull objectはよく使ってるからそれにするわ
個人的にはすっきり
でもc++の参照っていらん子やん?って気がしてならない

class A {
 static constexpr std::string s_empty_str{""};
 std::reference_wrapper<const std::string> m_s;
public:
 A(const std::string& s) : m_s(s) {}
 A(A&& rhs) : m_s(std::exchange(rhs.m_s, s_empty_str)) { }
};

744 名前:デフォルトの名無しさん [2025/11/14(金) 17:06:33.25 ID:sw2A38eb0.net]
>>743
型無しのnullpointerが型システム(機能保証)を破壊しているから、型を強要する参照は必要。



745 名前:デフォルトの名無しさん mailto:sage [2025/11/14(金) 17:48:56.23 ID:d/VpWy+aM.net]
>>744
古くね?
そういうのはoptional使えってのが最近のやり方でしょ?

746 名前:はちみつ餃子 mailto:sage [2025/11/14(金) 19:18:46.50 ID:YeCIJNF30.net]
>>743
参照は色々な場面で有用ではあるが、 D&E によれば最初の動機は演算子オーバーロードだと書かれている。
オブジェクトをコピーする必要がない (値をコピーせずに場所を渡せば充分) ような状況で参照がなくポインタを使うならいちいち &a+&b みたいにして書く必要が生じる。
いかにも煩わしいだろう。

747 名前:デフォルトの名無しさん mailto:sage [2025/11/14(金) 19:55:59.90 ID:p/1JbX4j0.net]
C++より古いの新しいの含めて多くの言語が採用してるように参照は引数でのみ使用可能で良かったと思うよ

748 名前:デフォルトの名無しさん [2025/11/14(金) 20:35:30.63 ID:/xnnTPah0.net]
>>747
他の言語はともかく、C++の参照は引数に限定されてないですよ。

int a = 10;
int* pa = &a;

749 名前:デフォルトの名無しさん [2025/11/15(土) 10:22:10.37 ID:ncudN0/g0.net]
747は、(実際の仕様はそうなっていないけど)引数でのみ使用可能なら良かったのに……という意味だと思うぞ。

750 名前:デフォルトの名無しさん [2025/11/15(土) 19:11:12.30 ID:lfrbAWbT0.net]
ああ
>使用可能で良かったと思うよ

ではなく、

>使用可能だったら良かったのにと思うよ
って事ですか

751 名前:デフォルトの名無しさん mailto:sage [2025/11/15(土) 19:25:57.81 ID:3JdS/6Ib0.net]
カスみたいな読解力

752 名前:デフォルトの名無しさん mailto:sage [2025/11/15(土) 19:35:13.09 ID:QqRirP4Fr.net]
そんなコミュ力高かったら、石が友達なんて言わない

753 名前:デフォルトの名無しさん [2025/11/15(土) 19:39:44.33 ID:ncudN0/g0.net]
分かりやすいように749みたいに書いたけど、747で普通に意味が通じるので、「ではなく」というとちょっと違う気がするかな。言葉って難しい。

754 名前:デフォルトの名無しさん mailto:sage [2025/11/16(日) 01:00:07.67 ID:oagsDxeg0.net]
こういう人が仕様書読んで実装すると思うとこわい



755 名前:デフォルトの名無しさん [2025/11/16(日) 13:18:16.47 ID:0LN83zrSa.net]
横からだけど
>>747 で充分判る
>>748 は本当に日本人か?

756 名前:デフォルトの名無しさん mailto:sage [2025/11/16(日) 13:32:50.84 ID:Xh/GBEYv0.net]
C++ばっかりやっとるからだよ
日本語を使え

757 名前:デフォルトの名無しさん [2025/11/16(日) 16:38:31.73 ID:r6khXsKc0.net]
>>755
>748だけど日本人だよ。
>747日本語の文法としておかしいと思うんだが分かるんか…。
こっちが年食ったんかなぁ…。

758 名前:デフォルトの名無しさん mailto:sage [2025/11/16(日) 16:49:19.65 ID:D8AV/AUw0.net]
あんたは機能的非識字なんでしょ
歳とか関係ないって

759 名前:デフォルトの名無しさん [2025/11/16(日) 18:20:15.84 ID:fnmgx6dT0.net]
747は、日本語の文法としておかしなところは別にないけれども、748のような読み方も許すという点で多義的な文にはなっているかな。
「C++より〜ように」という前半の文脈があるので748のような受け取り方はしない方が普通だと思うが、文法的には748のような読み方も一応可能だろう。
「使用可能(ということ)で良かった」としたら、完全に一義的になっているとまでは言えないまでも、多少ニュアンスは明確になっているかな。そうでもないか。

760 名前:デフォルトの名無しさん mailto:sage [2025/11/16(日) 19:06:28.66 ID:B8gkzotY0.net]
>>757
文字なんでニュアンスが伝わりづらいだけだよ

「この前の件だけど、両方出来るようになったよ」
「他と同じように片方のみで良かったと思うよ」

まあ誤解を与えない書き方とすると

「他と同じように片方のみで良かったのにと思うよ」
って感じで「のに」をいれた方が残念がっている様子が伝わってくるよね

761 名前:デフォルトの名無しさん [2025/11/17(月) 09:06:44.31 ID:g7E0m0EQ0.net]
C++はよく分からないので、cpprefjpにはいつもお世話になっているんだけど、生文字列リテラルのところにある「改行が入力された場合、改行の制御文字 '\n' に変換される」というのは説明として正確なのかな。
raw文字列リテラルのところの規格にはそれっぽいことは書いていないように思うし、改行文字は通常の文字としてそのままraw文字列リテラルに含められるだけであって、別に「変換」とかはされていないんじゃないかと思うんだけど。

762 名前:はちみつ餃子 mailto:sage [2025/11/17(月) 10:18:46.23 ID:DdlSQj440.net]
>>761
'\n' に変換するという説明は誤りだと私も思う。
規格内の例中では \n と同等というような説明はあるのでこれを変換と誤解したのかも?
https://timsong-cpp.github.io/cppwp/n4950/lex.string#5

763 名前:はちみつ餃子 mailto:sage [2025/11/17(月) 10:27:40.74 ID:DdlSQj440.net]
余談だけど生文字列リテラルの扱いにはちょっと変な特別扱いがある。
C++ では処理の初期段階で行を連結 (改行を削除) してしまうことになっていて、その時点では各改行が生文字列リテラルの中なのかどうか認識してない。
https://timsong-cpp.github.io/cppwp/n4950/lex#phases-1.2
後でトークンを分割するときになって生文字列リテラルを認識したらその範囲では連結を「取り消す」という処理が入る。
https://timsong-cpp.github.io/cppwp/n4950/lex#pptoken-3.1
結果としては改行はそのまま含まれるだけなんだけど、理屈としては色々な操作 (変換?) はされてる。

ただ、これは C++ の言語の解釈の話であって処理系の実装方法ではない。
つまり結果が同じであれば実装方法は問わないので連結してから取り消すのではなく連結の例外にしてもかまわないし、
生文字列リテラルを普通の文字列リテラルに変換するような手法もあるのかもしれない。

764 名前:デフォルトの名無しさん mailto:sage [2025/11/17(月) 20:16:57.16 ID:3c799E+W0.net]
>>761
gccにCRLF改行のソースコードを食わせてもLF(\n)だけになったので変換はされてるんじゃないか
他のコンパイラの動作はしらね



765 名前:デフォルトの名無しさん [2025/11/18(火) 02:43:23.41 ID:oTdu6LNz0.net]
>>763
削除されるのは「\(改行)」(Pythonとかでは明示的な行継続と言われているやつ)みたいなやつだけで、(\ に後続しない)単なる改行はwhitespace文字として扱われるだけかと思っていたんだけど。

>>764
改行をLFだけにする(正規化?)のは、raw文字列リテラルに限らない共通の処理なのでは。

766 名前:デフォルトの名無しさん mailto:sage [2025/11/18(火) 07:15:20.89 ID:cPKOUaFd0.net]
規格が決めてるのはソース中の論理的な「改行」の振る舞いであって、そのバイト表現は知ったこっちゃないって奴じゃないの
知らんけど

767 名前:はちみつ餃子 mailto:sage [2025/11/18(火) 10:05:52.54 ID:BySuHnsX0.net]
>>766
従来はそうだったはずだけど C++23 からは Unicode (UTF-8) のコードポイントの並びで規定されていて、 CRLF が単一の改行に置き換えられる規則が明記されてる。
ただ、 Unicode 系以外の文字コードから処理系定義の規則で Unicode に適当にマッピングするようなのも認めているので実態はあまり変わらない。

768 名前:デフォルトの名無しさん [2025/11/18(火) 23:53:18.65 ID:+AochNn2a.net]
>>764-765
termcapだかterminfoだかでゴニョゴニョ

769 名前:デフォルトの名無しさん mailto:sage [2025/11/19(水) 15:04:12.19 ID:HRoC/CWNM.net]
>>768
関係ない






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<250KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef