次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137
http://mevius.5ch.net/test/read.cgi/tech/1531558382/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
C++相談室 part138
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん (スフッ Sd9f-fGne)
2018/08/05(日) 18:02:36.57ID:DigzqJtZd952デフォルトの名無しさん (ワッチョイ bf1f-DOZt)
2020/11/25(水) 10:24:39.48ID:1u62rcpX0 ふとどうでもいいことを疑問に思ったのだが
structureが構造体ならclassは日本語にするとなんだ?
structureが構造体ならclassは日本語にするとなんだ?
953デフォルトの名無しさん (ワッチョイ 9f6d-hVLO)
2020/11/25(水) 11:20:02.68ID:cFWbedaT0 組合
954デフォルトの名無しさん (ワッチョイ bf1f-DOZt)
2020/11/25(水) 12:28:22.84ID:1u62rcpX0 へー
955デフォルトの名無しさん (ワッチョイ 9f61-7vHe)
2020/11/25(水) 12:53:48.33ID:jzvQX9aE0 >>952
類型
類型
956デフォルトの名無しさん (ワッチョイ 9f61-7vHe)
2020/11/25(水) 12:55:36.18ID:jzvQX9aE0 >>955
類似集合
類似集合
957デフォルトの名無しさん (ワッチョイ 9f79-b6o2)
2020/11/26(木) 17:53:04.15ID:rfhyh3I20 今からC++勉強するなら江添本がいいの?
958デフォルトの名無しさん (ワッチョイ 5701-FP8+)
2020/11/26(木) 18:20:34.01ID:xnB0RhUa0 >>948
はてなにでも顛末を書いてくれると、全国2億2000万のBoostユーザーが助かりますね。
はてなにでも顛末を書いてくれると、全国2億2000万のBoostユーザーが助かりますね。
959デフォルトの名無しさん (オッペケ Srcb-tqwb)
2020/12/01(火) 15:53:07.44ID:V2eyqU/tr gdbのプロンプトでシェルの文法使う方法ある?
具体的にはfor文で配列を走査しながら内容をprintしたりしたい
具体的にはfor文で配列を走査しながら内容をprintしたりしたい
960デフォルトの名無しさん (オッペケ Srcb-tqwb)
2020/12/01(火) 15:54:40.11ID:V2eyqU/tr うわ間違えた
正しいスレに移動します
正しいスレに移動します
961デフォルトの名無しさん (ワッチョイ 7a3d-cM6j)
2020/12/31(木) 23:18:49.36ID:ya7PW7y20 質問ですがstd::type_treatsってテンプレートパラメータに自作クラスを入れても動くはずのもの?
具体的にいはstd::is_signed<T>()とか、
具体的にいはstd::is_signed<T>()とか、
963デフォルトの名無しさん (ワッチョイ c2ab-UAPS)
2021/01/01(金) 05:54:42.84ID:DIBn3EXs0 >>961
こゆこと?
struct T {};
template<>struct std::is_signed<T> : std::true_type {};
int main()
{
using namespace std;
cout << boolalpha << is_signed_v<T> << endl;
}
こゆこと?
struct T {};
template<>struct std::is_signed<T> : std::true_type {};
int main()
{
using namespace std;
cout << boolalpha << is_signed_v<T> << endl;
}
964デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/01(金) 22:50:54.41ID:Gp2Do8Ou0 >>963
ちょっと違っており特殊化せずにうまいことやってくれるのかという問いのつもり
つまり
class Foo {
(代入演算子四則演算とunary minusが定義されている)
};
という自作クラスFooがあったとして、実はstd::is_signed<Foo>()がうまいことやってくれてtrue/falseは勝手に決まるのかどうか、という質問
実は符号付きのはずの自作クラスで、エラーになりやがらないのにfalseが返されており
実際のところうまくいってないのですがwwww
ちょっと違っており特殊化せずにうまいことやってくれるのかという問いのつもり
つまり
class Foo {
(代入演算子四則演算とunary minusが定義されている)
};
という自作クラスFooがあったとして、実はstd::is_signed<Foo>()がうまいことやってくれてtrue/falseは勝手に決まるのかどうか、という質問
実は符号付きのはずの自作クラスで、エラーになりやがらないのにfalseが返されており
実際のところうまくいってないのですがwwww
965デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/01(金) 22:52:49.85ID:Gp2Do8Ou0 というわけで特殊化不可避かつstd::type_treatsが自作クラス用の特殊化を認める仕様であるという回答があれば
それはそれで有用な情報という境地に達した、
(実際どう考えてもstd::numeric_limits<T>::max()とかはTが自作クラスなら特殊化不可避のように思える
それはそれで有用な情報という境地に達した、
(実際どう考えてもstd::numeric_limits<T>::max()とかはTが自作クラスなら特殊化不可避のように思える
966デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/02(土) 00:35:56.66ID:f21yM1/d0 ていうかMSVC2019のstd::is_signed<T>()の定義を見ていったら
1. is_integral_v<T>がtrue(Tが整数型)なら((T)-1 < (T)0)の真偽が結果
2. is_integral_v<T>がfalseならis_floating_point_v<T>(Tが浮動小数点型)の真偽が結果
3. 上記のどれにも当てはまらなければfalseが結果
ということのようで、自作クラスがTに入り込む余地は無いぽい(常に必然的に3の結果になる仕様
1. is_integral_v<T>がtrue(Tが整数型)なら((T)-1 < (T)0)の真偽が結果
2. is_integral_v<T>がfalseならis_floating_point_v<T>(Tが浮動小数点型)の真偽が結果
3. 上記のどれにも当てはまらなければfalseが結果
ということのようで、自作クラスがTに入り込む余地は無いぽい(常に必然的に3の結果になる仕様
967デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/02(土) 01:00:19.70ID:f21yM1/d0 というわけでネットに転がっていた「符号を返すテンプレート」signnum<T>は、Tに自作クラスを渡したときエラーにならず
間違った結果を返すというたいへんおっかないブツであることが判明いたので次のようにすた、
template <typename T>
inline constexpr int signnum(T x, std::false_type is_signed) {
(void)(is_signed);
return (T(0) < x);
}
template <typename T>
inline constexpr int signnum(T x, std::true_type is_signed) {
(void)(is_signed);
return (T(0) < x) - (x < T(0));
}
template <typename T>
inline constexpr int signnum(T x) {
// std::is_signed<T>()のTに整数型でも浮動小数点型でもない型を与えるとfalseが返され、
// 事実上意味をなさないため、Tが整数型でも浮動小数点型でもなければbNumericでエラーにする。
constexpr bool bNumeric = (std::is_integral<T>() || std::is_floating_point<T>());
static_assert(bNumeric, "*** ERR ***");
return signnum(x, std::is_signed<T>());
}
いじょ
間違った結果を返すというたいへんおっかないブツであることが判明いたので次のようにすた、
template <typename T>
inline constexpr int signnum(T x, std::false_type is_signed) {
(void)(is_signed);
return (T(0) < x);
}
template <typename T>
inline constexpr int signnum(T x, std::true_type is_signed) {
(void)(is_signed);
return (T(0) < x) - (x < T(0));
}
template <typename T>
inline constexpr int signnum(T x) {
// std::is_signed<T>()のTに整数型でも浮動小数点型でもない型を与えるとfalseが返され、
// 事実上意味をなさないため、Tが整数型でも浮動小数点型でもなければbNumericでエラーにする。
constexpr bool bNumeric = (std::is_integral<T>() || std::is_floating_point<T>());
static_assert(bNumeric, "*** ERR ***");
return signnum(x, std::is_signed<T>());
}
いじょ
968デフォルトの名無しさん (ワッチョイ c2ab-UAPS)
2021/01/02(土) 06:01:56.33ID:4Im5elX80 (void)(is_signed);
↑
これの意図は?
↑
これの意図は?
969デフォルトの名無しさん (ワッチョイ c2ab-UAPS)
2021/01/02(土) 06:16:06.20ID:4Im5elX80 SFINAEでこうやっとけばよくね?
template <typename T> inline constexpr
auto signnum(T x) -> std::enable_if_t<std::is_signed_v<T>, bool>
{
return x < T(0);
}
template <typename T> inline constexpr
auto signnum(T x) -> std::enable_if_t<std::is_signed_v<T>, bool>
{
return x < T(0);
}
970デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/02(土) 11:32:04.22ID:f21yM1/d0971はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 453e-UAPS)
2021/01/02(土) 12:48:41.87ID:rf+zWHQf0 >>964
std 内の定義の特殊化は「標準ライブラリの要件を満たす限り」という制限の範囲で許されている。
https://timsong-cpp.github.io/cppwp/n3337/namespace.std
仕様で偽値を返す場面を真値に変更するような特殊化は許されていないってこと。
(最新の仕様ではもっと厳しい制限がついてる。)
std::is_signed に関して仕様に反せずに自作クラスが真を返すということはあり得ないので
自前で特殊化しては駄目。
std::numeric_limits を特殊化する分にはアリ。
std 内の定義の特殊化は「標準ライブラリの要件を満たす限り」という制限の範囲で許されている。
https://timsong-cpp.github.io/cppwp/n3337/namespace.std
仕様で偽値を返す場面を真値に変更するような特殊化は許されていないってこと。
(最新の仕様ではもっと厳しい制限がついてる。)
std::is_signed に関して仕様に反せずに自作クラスが真を返すということはあり得ないので
自前で特殊化しては駄目。
std::numeric_limits を特殊化する分にはアリ。
972デフォルトの名無しさん (ササクッテロ Spf1-vWRd)
2021/01/02(土) 13:42:23.47ID:Xp6P49Q4p973デフォルトの名無しさん (ワッチョイ 06e9-Zovn)
2021/01/02(土) 14:26:55.99ID:yNAtJK6O0 >>970,972
使わない引数は仮引数名を書かないのがいい。
使わない引数は仮引数名を書かないのがいい。
974はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 063e-UAPS)
2021/01/02(土) 22:36:02.03ID:sXf7WaOy0 予約とか互換性の都合とかで残っているだけの仮引数なら名前を付けないほうがいいけど、
この場合はむしろ (関数内では) 使ってないからこそ用途を表す名前は付いていて欲しいけどな。
このあたりは感覚的な話かも。
この場合はむしろ (関数内では) 使ってないからこそ用途を表す名前は付いていて欲しいけどな。
このあたりは感覚的な話かも。
975デフォルトの名無しさん (ワッチョイ 623d-G7ci)
2021/01/02(土) 23:09:40.00ID:f21yM1/d0 仮引数は削ってしまってから後悔したことが多い希ガス
仮引数を文字列としては残すがいちいちコメントアウトするというのも作業性が落ちるし
だいたいCと共用するヘッダファイルでは仮引数名を削ることはできない
よって削らな〜い☆彡
仮引数を文字列としては残すがいちいちコメントアウトするというのも作業性が落ちるし
だいたいCと共用するヘッダファイルでは仮引数名を削ることはできない
よって削らな〜い☆彡
976デフォルトの名無しさん (ワッチョイ c2ab-UAPS)
2021/01/03(日) 06:56:16.12ID:qsZZ3Tgb0977デフォルトの名無しさん (ワッチョイ c2ab-UAPS)
2021/01/03(日) 06:57:29.24ID:qsZZ3Tgb0 >>970
だったら、これでええやん
template <typename T>
inline constexpr int signnum(T x, std::false_type) {
return (T(0) < x);
}
だったら、これでええやん
template <typename T>
inline constexpr int signnum(T x, std::false_type) {
return (T(0) < x);
}
978デフォルトの名無しさん (ワッチョイ ed79-vWRd)
2021/01/03(日) 08:39:39.79ID:spQgk+t90 >>971
真偽値なのに仕様に反せず特殊化するのは不可能ということで特殊化ダメ、って考えたんだろうけど
特殊化して本来の動作が全く変わらない、なんてのが有り得るのか?(あるとしてもやる意味が無い
仮に自作クラスの型で完全特殊化しても、元の動作とは異なる動作を生むわけだから
requirementsの意味がよくわからん
真偽値なのに仕様に反せず特殊化するのは不可能ということで特殊化ダメ、って考えたんだろうけど
特殊化して本来の動作が全く変わらない、なんてのが有り得るのか?(あるとしてもやる意味が無い
仮に自作クラスの型で完全特殊化しても、元の動作とは異なる動作を生むわけだから
requirementsの意味がよくわからん
979デフォルトの名無しさん (ワッチョイ 814f-Iopg)
2021/01/03(日) 09:14:35.48ID:myNdCsmw0 >>975
使わない仮引数を削ると言ったらふつうヘッダでやる話じゃないだろう。
>仮引数を文字列としては残すがいちいちコメントアウトするというのも作業性が落ちるし
作業性は使うツールにもよるね。VSだったらダブルクリックで仮引数名を選択して
コメントアウトボタン押すだけの2ステップ。
使わない仮引数を削ると言ったらふつうヘッダでやる話じゃないだろう。
>仮引数を文字列としては残すがいちいちコメントアウトするというのも作業性が落ちるし
作業性は使うツールにもよるね。VSだったらダブルクリックで仮引数名を選択して
コメントアウトボタン押すだけの2ステップ。
980デフォルトの名無しさん (ワッチョイ 797b-s4wZ)
2021/01/03(日) 11:55:07.33ID:W81TgN5I0 C++相談室 part153
https://mevius.5ch.net/test/read.cgi/tech/1602339500/
https://mevius.5ch.net/test/read.cgi/tech/1602339500/
981はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 063e-UAPS)
2021/01/03(日) 14:19:53.78ID:/m8P2Sw00 >>978
いや、標準が提供するのは std::type_traits のような副作用のない判定用メタ関数だけではない。
例でたまに出てくるのは std::swap を効率化するというような話とか。
ムーブで効率的に入れ替えてはくれるけど、
クラスの特性によっては入れ替えのときに限ってもっと効率的にやれるかもしれない。
入れ替えるという結果が同じなら仕様に反しないし、
効率的にやれるなら特殊化する価値はある。
調べてもやり方の例としては出てくるものの具体的に効率的になる例は見つからんかったんだが。
実用的な例としてはアロケータの特殊化。
今では std::allocator ではなく std::allocator_traits を特殊化する形が推奨されているけど、
いずれにしても特殊化でやる前提で用意されている機能。
いや、標準が提供するのは std::type_traits のような副作用のない判定用メタ関数だけではない。
例でたまに出てくるのは std::swap を効率化するというような話とか。
ムーブで効率的に入れ替えてはくれるけど、
クラスの特性によっては入れ替えのときに限ってもっと効率的にやれるかもしれない。
入れ替えるという結果が同じなら仕様に反しないし、
効率的にやれるなら特殊化する価値はある。
調べてもやり方の例としては出てくるものの具体的に効率的になる例は見つからんかったんだが。
実用的な例としてはアロケータの特殊化。
今では std::allocator ではなく std::allocator_traits を特殊化する形が推奨されているけど、
いずれにしても特殊化でやる前提で用意されている機能。
982デフォルトの名無しさん (ワッチョイ 6f1f-mBT+)
2021/02/23(火) 10:31:30.19ID:anF8SsN/0 void somefunc(const int& a){...}
こんな感じの関数に
somefunc(0);だとうまく行かないが
const int hoge = 0;
somefunc(hoge);ならうまくいくんだが
somefunc(0)でエラーも警告も出ないのは仕様?
こんな感じの関数に
somefunc(0);だとうまく行かないが
const int hoge = 0;
somefunc(hoge);ならうまくいくんだが
somefunc(0)でエラーも警告も出ないのは仕様?
983デフォルトの名無しさん (ワッチョイ 6fe9-W5tZ)
2021/02/23(火) 10:33:48.47ID:IoYWawP80 はい。
それで「うまく行かない」ってどういう状況なんでしょうね?
それで「うまく行かない」ってどういう状況なんでしょうね?
984デフォルトの名無しさん (ワッチョイ 6f1f-mBT+)
2021/02/23(火) 10:35:20.19ID:anF8SsN/0 関数入った瞬間に0インスタンスが消えるかして
関数の中で変な値になっとる
(最適化Os)
関数の中で変な値になっとる
(最適化Os)
985デフォルトの名無しさん (ワッチョイ 6f1f-mBT+)
2021/02/23(火) 10:37:41.60ID:anF8SsN/0 上の表現は正確じゃないな
class A{const int& hoge;public: A(const int& hoge):hoge(hoge){} void somefunc(){...} };
A a(0); a.somefunc(); // なんか変な値になってる
const int hoge = 0; A a(hoge); a.somefunc(); // 正しい挙動になる
class A{const int& hoge;public: A(const int& hoge):hoge(hoge){} void somefunc(){...} };
A a(0); a.somefunc(); // なんか変な値になってる
const int hoge = 0; A a(hoge); a.somefunc(); // 正しい挙動になる
986デフォルトの名無しさん (ワッチョイ 6fe9-W5tZ)
2021/02/23(火) 10:37:55.22ID:IoYWawP80 最適化されたコードをデバッガで見て変な値が見えるという話なら、そんなこともあるだろうとしか。
987デフォルトの名無しさん (ワッチョイ 6fe9-W5tZ)
2021/02/23(火) 10:41:26.23ID:IoYWawP80 >>985
それは仕様どおり。 A a(0) に渡された const int& の指すオブジェクトは一時オブジェクトで、寿命は ; まで。
それは仕様どおり。 A a(0) に渡された const int& の指すオブジェクトは一時オブジェクトで、寿命は ; まで。
988デフォルトの名無しさん (ワッチョイ 6f1f-mBT+)
2021/02/23(火) 10:44:06.65ID:anF8SsN/0989デフォルトの名無しさん (ワッチョイ 6f1f-mBT+)
2021/02/23(火) 10:47:45.54ID:anF8SsN/0 いや、参照で保持するのをやめればいいだけの話だった
すっきりした、ありがとうございます
すっきりした、ありがとうございます
990デフォルトの名無しさん (スッップ Sd33-55sF)
2021/03/24(水) 07:43:19.28ID:PNXF+EC1d991デフォルトの名無しさん (ワッチョイ 13ad-zgiT)
2021/03/24(水) 13:35:18.40ID:uPqg/PBu0 寿命つまりスコープを制御したいなら、{}で囲めばok
992デフォルトの名無しさん (ワッチョイ cb45-9/J3)
2021/05/08(土) 09:21:32.08ID:St3wXYGV0 固定小数点を作ろうとしててさ
struct fix
{
int minor, major;
friend auto operator <=> (const fix& lhs, const fix& rhs) = default;
};
int main()
{
fix a{1, 2};
fix b{2, 1};
cout << boolalpha;
cout << (a < b) << endl; //true
cout << (a > b) << endl; //false
}
俺はまだ大小関係を定義してないのに勝手に何かぬかしてるようなんだけど
= default; が邪魔で定義できない
どうすればいい?
struct fix
{
int minor, major;
friend auto operator <=> (const fix& lhs, const fix& rhs) = default;
};
int main()
{
fix a{1, 2};
fix b{2, 1};
cout << boolalpha;
cout << (a < b) << endl; //true
cout << (a > b) << endl; //false
}
俺はまだ大小関係を定義してないのに勝手に何かぬかしてるようなんだけど
= default; が邪魔で定義できない
どうすればいい?
993デフォルトの名無しさん (ワッチョイ 437b-HsZ9)
2021/05/08(土) 21:31:17.88ID:9lKegb3f0 >>992
> 固定小数点を作ろうとしてて
この時点で既におかしい
後は向こうでどうぞ
C++相談室 part155
https://mevius.5ch.net/test/read.cgi/tech/1616555235/
> 固定小数点を作ろうとしてて
この時点で既におかしい
後は向こうでどうぞ
C++相談室 part155
https://mevius.5ch.net/test/read.cgi/tech/1616555235/
994デフォルトの名無しさん (ワッチョイ cb45-9/J3)
2021/05/08(土) 21:43:34.99ID:St3wXYGV0995デフォルトの名無しさん (ワッチョイ bb4f-DjaX)
2021/05/08(土) 22:16:16.65ID:L+qXSIbq0 >>992
= defaultって書いたからその通り動作しているだけだと思うが?言ってることが支離滅裂。
= defaultって書いたからその通り動作しているだけだと思うが?言ってることが支離滅裂。
996デフォルトの名無しさん (ワッチョイ cb45-9/J3)
2021/05/08(土) 22:34:51.84ID:St3wXYGV0 >>995
その通りとは?
その通りとは?
997デフォルトの名無しさん (ワッチョイ 2fe5-derf)
2021/05/09(日) 04:24:19.93ID:sKwNJeAm0998デフォルトの名無しさん (ブーイモ MMd6-HO9V)
2021/05/09(日) 22:17:31.30ID:pcL7xDKPM >>996
こいつ日本語も不自由?哀れ
こいつ日本語も不自由?哀れ
999デフォルトの名無しさん (ワッチョイ cb45-9/J3)
2021/05/10(月) 06:11:01.47ID:CKsNew1t0 = default; が邪魔って言ってんのに意味わかってねーやつの戯言
1000デフォルトの名無しさん (ワッチョイ 2301-dxvU)
2021/05/10(月) 06:47:02.10ID:XulgkjOp0 あわしろ氏が>>1000!
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1008日 12時間 44分 26秒
新しいスレッドを立ててください。
life time: 1008日 12時間 44分 26秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 日本、G7への中国招待を懸念 議長国フランスに慎重な対応要請 [どどん★]
- 【将棋】福間香奈 女流六冠が会見 妊娠・出産でタイトル戦の事実上不戦敗 「妊娠したら、どちらか一方を諦めないといけない状況」★3 [冬月記者★]
- 三崎優太氏「貧乏に生まれたら奨学金地獄、親ガチャで人生が決まるなんて…」環境による教育の差を疑問視 「おかしいよ」 [muffin★]
- 【Jリーグ】新スタジアムの維持管理費 秋田市の沼谷市長「ブラウブリッツ秋田が負担することが望ましい」 [鉄チーズ烏★]
