C++相談室 part166 (569レス)
前次1-
抽出解除 レス栞

18
(3): はちみつ餃子◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/05(月) 17:57:32.37 ID:7tS1Ts+e0(1) AAS
>>17
17(1): 15 (ワッチョイ afaa-hOut) [sage] 2025/05/05(月) 16:19:33.69 ID:WDPor1X60(1) AAS
>>16
ありがとうございます。

std::endlの代わりに' '(空白)を使うことはできませんかね
図々しくごめんなさい
まさに「諸々に配慮」と述べた部分がそれでね……。
ここで定義した operator<< と元からある operator<< の両方が char を受け取ることが可能なので
どちらを呼び出すべきか曖昧なオーバーロード (ambiguous overload) になってしまっている。

ちゃんとやる場合はここで定義する operator<< が受け取れるのはコンテナに限定しなければならない。

型に制約を付ける真っ当な方法が入ったのは C++20 からなのでそれ以前の C++ でやろうとすると回りくどいんだよ。
C++11 でなるべく簡素に書くとしたらこんな感じかな。
外部リンク:wandbox.org
23
(1): デフォルトの名無しさん (ワッチョイ a701-uYIY) [sage] 2025/05/06(火) 14:29:32.39 ID:tCHDdC6b0(3/3) AAS
>>22
22(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 6332-x8bn) [sage] 2025/05/06(火) 13:42:19.73 ID:SvTeM3j90(2/6) AAS
>>21
関数名の前に auto を書くと仮引数の後ろに返却値の型を書けるようになる。
つまり -> から { までのところに書いてるのが返却値の型。

従来の書き方では関数の仮引数を返却値の型を決定する文脈では使えないというルールがある。
たとえば
template<class T> decltype(e) foo(const T& e) {return e;}
というようなことは出来ない。 ここで e を参照することは出来ない。

後置では返却値の型を書くところで仮引数を使ってかまわない。
template<class T> auto bar(const T& e) -> decltype(e) {return e;}
ってのはアリ。

この場合の auto は返却値の型を後置するというマークってことね。
後置にする必要がなくても後置で一貫させてるプロジェクトもたぶん結構ある。
auto がこのような用途で使えるようになったのは C++11 からなのでもう結構浸透してると思うんだけど、全く見たことないの?

!! は ! をふたつ並べてるだけ。 bool にキャストする代わりに使うイディオムなんだけど見づらいからやめたほうがよいという人も多い。
解説を有難うございます
返り値を後置する記法のアドバンテージが分かりました
>>18は返り値を後置にしてるけどもこれは必須ではないということね
!!も分かりました(g++-12はなしで通ります)
27
(1): 15 (ワッチョイ afaa-hOut) [sage] 2025/05/06(火) 18:35:49.00 ID:jhNAw2EC0(1/2) AAS
>>18
重ね重ねありがとうございます。
なんとか理解してみます。

C++20だとどうなります?
一応、C++の新機能ってぺージ見たんですけど、よくんからなくて
43
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 6332-6RYV) [sage] 2025/05/08(木) 02:01:35.71 ID:aAWkv5hi0(1/3) AAS
>>41
41(1): デフォルトの名無しさん (JP 0Hee-L4A6) [] 2025/05/08(木) 00:57:15.98 ID:4oP42WaSH(1/3) AAS
>>20
decvalは要る。お前さんは数値計算知らん。
型拡張で重要になるぞ。
何を言ってるんだ? >>18 で declval を使ったのが無意味だという話をしてるんだぞ。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.235s*