C++相談室 part166 (569レス)
上下前次1-新
抽出解除 レス栞
71: デフォルトの名無しさん (ワッチョイ f34b-k+y7) [sage] 2025/05/11(日) 21:11:16.07 ID:8gkdAC4l0(5/5) AAS
>>7070(1): デフォルトの名無しさん (ワッチョイ 03a6-XCeo) [sage] 2025/05/11(日) 20:58:44.05 ID:WWvVAeL50(3/4) AAS
別に便利ツール自体がないわけではなく、ライブラリはOS側のパッケージマネージャやcanonやバージョン管理ツールの機能等で揃えて
ビルドはcmakeというメタビルドツールで各OSの持つビルドツール向けの入力ファイルを生成したりということはする
統一感には欠けるしばらばらのものを組み合わせてるから躓く可能性もずっと高いけども
バラバラなのはちょっとまずいですね...
なんか良さげなのないもんですかね...
93(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 03fe-G5I0) [sage] 2025/05/17(土) 12:36:55.07 ID:Z8hx0US+0(1) AAS
>>89なにか間違っているのだからどこが間違っているのか調べるために充分な情報が提示されないと応えられない。
質問者は理解できてきないから質問しているので質問の内容や前提が根本からあてにならず、とにもかくにもまずはコードとエラーメッセージを出してもらわないと始まらない。
そのときなるべく抜粋せずに全て出すのが望ましい。
109: はちみつ餃子◆8X2XSCHEME (ワッチョイ 5f32-lpF9) [sage] 2025/05/20(火) 11:18:12.07 ID:XnKVhLuZ0(1) AAS
変換という形式を取るのが妥当な場面なのかどうかは脇に置いて、 >>9595(2): デフォルトの名無しさん (ワッチョイ 8be4-Od/L) [] 2025/05/18(日) 01:52:18.18 ID:1CgD4IwZ0(1) AAS
>>94
自分の場合は7行目で
Hoge hoge = [] {std::cout << "hoge\n";};
のように書いてエラーとなってます。
このCのような初期化構文はコンストラクタの呼び出しを行わないのでしょうか?
ちなみにこのレスように書いたらエラーが消えました
のような書き方でやりたいというならこう書ける。
#include <iostream>
struct Hoge {
template <class T> Hoge(const T& f) { f(); }
};
int main() {
Hoge hoge = [] { std::cout << "hoge\n"; };
}
より親切に制約も書くならこうかな? C++11 の範囲内でやろうとすると変な感じなんだけど仕方がない。 enabler イディオムってなんか不格好じゃない?
#include <iostream>
#include <type_traits>
struct Hoge {
template <class T, typename std::enable_if<std::is_same<decltype(std::declval<T>()()), void>{}, std::nullptr_t>::type = nullptr> Hoge(const T& f) { f(); }
};
int main() {
Hoge hoge = [] { std::cout << "hoge\n"; };
}
C++20 だと制約の記述がすっきりしてかなり楽になる。
#include <iostream>
#include <type_traits>
struct Hoge {
template <class T> requires std::is_invocable_r_v<void, T> Hoge(const T& f) { f(); }
};
int main() {
Hoge hoge = [] { std::cout << "hoge\n"; };
}
235(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 8d32-2Myj) [sage] 2025/06/05(木) 17:37:36.07 ID:BNqgyRrD0(2/3) AAS
>>233233(2): デフォルトの名無しさん (ワッチョイ 69d6-a+Ou) [sage] 2025/06/05(木) 16:59:25.81 ID:I5agSXi50(1/3) AAS
単純なんですが、わからんので教えてください。
#include <iostream>
int main(){
std::cout <<"hello"s<<std::endl;
}
がエラーになります。なんか勘違いしてます?sは無理につけないほうがいいのかな?!
$ g++ -Wall -Wextra -std=c++23 -O2 -DGNU_SOURCE main.cpp -o main
g++は11.4.0
結論から言うとこういう感じ。
#include <iostream>
#include <string>
int main(){
using namespace std::literals::string_literals;
std::cout <<"hello"s<<std::endl;
}
s はヘッダ string の中の std::literals::string_literals という名前空間で定義されているからこういう形で using してからじゃないと使えない。
この単純なケースだけを見れば s を付ける利点は何もないけど状況次第。
296(1): デフォルトの名無しさん (JP 0H46-E6Ax) [] 2025/06/15(日) 00:11:58.07 ID:bHsxd1q/H(2/4) AAS
C++の知識というか、ノウハウが一応行きわたっているからだと
思う。と言っても新人は習得に手こずるだろうけど、そばに適切
に指導してくれる先輩がいれば大丈夫。あくまで適切な指導をして
くれる先輩だけど。ラーメン屋の店主みたいな奴だと地獄。
405: デフォルトの名無しさん (JP 0H46-E6Ax) [] 2025/06/20(金) 17:27:19.07 ID:yQfQLmUOH(1) AAS
std::formatの件だが、Visual Studio 2022のコンパイラ設定が
デフォルトでC++14標準になってた。すまん。
531: デフォルトの名無しさん (ワッチョイ ffa1-BzvG) [sage] 2025/07/06(日) 11:00:55.07 ID:B20RUTJT0(5/9) AAS
>>528>Bが一回余分にループするのは気持ち悪いけど
いきなりis >> s してその直後のeof()を当てにするロジックである限り、
リンク先のケースBの挙動となり、最後の要素に引き続く空白文字がないとき
最後の要素が入力ストリームにあるのに受け取れないというもっと深刻な事態となる以下略
>>529operator boolはis.good()と同じはず……
なおかつそれ単独では(is >> sのsがchar以外のとき)ケースBの解決になんね
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.071s*