C++相談室 part158

■ このスレッドは過去ログ倉庫に格納されています
2021/11/15(月) 18:49:18.44ID:I69rZ/Of
前スレ
C++相談室 part157
https://mevius.5ch.net/test/read.cgi/tech/1628474251/
2021/11/24(水) 02:40:02.07ID:xFDMAHHD
http://pbs.twimg.com/media/EUH_eMWUwAAgsV4.jpg
https://pbs.twimg.com/media/D4p7dNfUwAAa34y.jpg
2021/11/24(水) 03:00:57.55ID:P1gN11rG
ローカル時刻かUTCか以前の問題として、そもそもどんなフォーマットで数値に変換するのか
それが不明だったから誰も回答しなかったのだろうに

あとドキュメント信じる限りじゃzoned_timeはVS2019 16.10から使えるってよ
2021/11/24(水) 03:04:53.60ID:Q5JPayEq
C++は糞
std::は糞ばかり
boost最強
まで読んだ
144デフォルトの名無しさん
垢版 |
2021/11/24(水) 03:08:01.30ID:Q5JPayEq
>>142
>>100 が悪い
2021/11/24(水) 04:22:29.20ID:xFDMAHHD
じゃ、もうtime_t使っとけ
2021/11/24(水) 05:14:05.40ID:ZtAViqSQ
「良い感じの関数」なんて今流行りwのAIとか使わんと無理でしょ
2021/11/24(水) 07:01:18.14ID:xQvD3wWY
確かにchronoは今一だね
filesystemはthread, iomanipとの連携が悪すぎ
使いにくいったらありゃしない
2021/11/24(水) 07:01:39.82ID:xQvD3wWY
- filesystemは
+ tilesystemや
2021/11/24(水) 08:47:11.69ID:xQvD3wWY
auto p = (void*)[]{};
これが通らないんだけど
stateless-lambdaは関数と見なせない?
2021/11/24(水) 09:11:02.53ID:083KFMkM
auto p = (void*)(void (*)())[]{};
2021/11/24(水) 09:17:04.13ID:xFDMAHHD
auto p = []()->void*{};
もう少し学習しろ
2021/11/24(水) 10:46:50.00ID:kXzWnsgO
何がしたいんか知らんけど
auto p = [](){};
auto p = []()->void*{};
auto p = []()->void{};
本人の意図が判らんことには絶対に正解に辿り着けない質問大杉
2021/11/24(水) 11:11:35.49ID:xQvD3wWY
void func1(void*);
void func2(){}
func1(func2);
のようなことをしようとしてて怒られるから
func1((void*)func2);
にしてた

で、func2で名前空間を汚染したくないから
stateless-lambda使おうと思った
2021/11/24(水) 11:25:51.06ID:nY9AsqgQ
関数 (関数ポインタ) を void* で受ける雑なことをしといて名前空間を汚すのは気にするのか。
まあフレームワークとかの側でそうなってたら仕方ない場合もあるけど……。
2021/11/24(水) 11:28:11.15ID:P1gN11rG
variant的なことを昔ながらの方法でやっているのかもしれない
2021/11/24(水) 11:41:52.30ID:kXzWnsgO
auto p = []()->void*{return NULL;};
↑これはOKだが
auto p = []()->void*{};
↑こっちはコンパイルエラーにして欲しいよね
2021/11/24(水) 11:48:13.06ID:jtZYcQVF
単にステートレスラムダを関数ポインタに変換したいならこういう有名なハックがある
auto p = +[]{};
2021/11/24(水) 12:47:46.56ID:xQvD3wWY
>>157
おお、これはいい
dx
2021/11/24(水) 12:55:27.21ID:xQvD3wWY
ポインタに単項プラスなんぞ考えたこともなかった
void test(char* p)
{
cout << +p << endl;
cout << *+p << endl;
cout << *(0+p) << endl;
cout << 0[p] << endl;
}
2021/11/24(水) 15:19:51.62ID:083KFMkM
生配列をポインタに変換するときも単項+使うね
2021/11/24(水) 15:33:19.13ID:kXzWnsgO
>>160
何が嬉しいの
2021/11/25(木) 09:42:14.59ID:r5Heuy4P
C++11 や C++17 や C++20 とかどのオプションでコンパイルされているかを
コンパイル中に判断したいのですが
ソースコード中にどう書けばよいのですか
2021/11/25(木) 10:11:07.71ID:r5Heuy4P
解決
https://docs.microsoft.com/en-us/cpp/build/reference/std-specify-language-standard-version?view=msvc-160
_MSVC_LANG
2021/11/25(木) 10:12:19.59ID:lTzmbhqT
全然解決してなくて草
2021/11/25(木) 11:00:47.97ID:nZfwh6w7
>>161
#include <iostream>
#include <cstdio>
int main() {
int a[] = {1, 2, 3, 4};
std::printf("%p %p\n", &a, &a + 1);
std::printf("%p %p\n", +a, +a + 1);
int (*p)[4] = &a;
std::printf("%p %p\n", p, p + 1);
int *q = &a[0];
std::printf("%p %p\n", q, q + 1);
return 0;
}
0x7ffd548f5d00 0x7ffd548f5d10
0x7ffd548f5d00 0x7ffd548f5d04
0x7ffd548f5d00 0x7ffd548f5d10
0x7ffd548f5d00 0x7ffd548f5d04
つまり&a[0]と書くのを+aと書くだけですませられる
どっちが分かりやすいかはさておき
2021/11/25(木) 11:28:16.28ID:pIkhaGD2
__cplusplus マクロ見るんじゃね?普通は
あとは言語機能ごとのマクロ見たり
2021/11/25(木) 11:38:56.35ID:lTzmbhqT
まるで間違ってて草
2021/11/25(木) 13:18:45.98ID:U2fItJ5c
>>165
<iostream>いらないね

それとlvalue transformationがかかる場面で
わざわざ単項プラスを使う必要性が
そのサンプルでは示せてないようだが
2021/11/25(木) 14:43:49.72ID:Ts2h3uwp
みんなテキトーだなー(棒)
2021/11/26(金) 02:28:38.10ID:qCsl9kRb
>>166
処理系がちゃんとそのへんのルールを守ってくれればいいが現実は非情である。
2021/11/26(金) 21:22:58.84ID:Hq7eoo6P
https://www.youtube.com/watch?v=ia8GncoXA1s
2021/11/27(土) 03:24:08.24ID:ymghmbi1
The following macro names shall be defined by the implementation:
__cplusplus
The name __cplusplus is defined to the value 199711L when compiling a C++ translation unit.

G++ now sets the predefined macro __cplusplus to the correct value, 199711L for C++98/03, and 201103L for C++11.

http://gcc.gnu.org/gcc-4.7/changes.html
But g++ < 4.7.0 is __cplusplus defined alway 1.

https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
2021/11/27(土) 04:01:44.14ID:7zx+CKid
いまさらかよ
2021/11/27(土) 12:26:56.81ID:tS+5RcHX
マジかよ知らなかった
GCCくんさぁ…
2021/11/27(土) 13:29:25.44ID:at/FeDW1
>>174
初心者?
2021/11/27(土) 14:01:53.67ID:7zx+CKid
リナスもg++の設計にはイラチMAXの筈だわ
2021/11/27(土) 15:41:12.47ID:dxTMcmeT
Rust厨に弱みを魅せるな
2021/11/27(土) 16:22:10.07ID:GY7utvzm
よわみにはつけこまれる
2021/11/28(日) 21:05:38.19ID:6joWVJIB
C++でblas, lapackを使うのにいいインターフェースってどれでしょうか?
調べてたらCppLapack, Lapack++、armadillo とか出てきましたが、定番さとか使いやすさとか教えていただけると嬉しいです

とりあえずは複雑なことはしない予定で、行列の掛け算とか対角化ぐらいが簡潔に書けると嬉しいです
180デフォルトの名無しさん
垢版 |
2021/11/29(月) 00:38:26.49ID:UEkaTEcQ
久しぶりにC++再開したが
昔からだが
PHPはC++のスクリプト版といえるかのように文法・関数が似てるから
プロトタイプをPHPで作成したほうが時短になるかと?
仮想コードによるアルゴリズムの記述やフローチャートなどに近い
181デフォルトの名無しさん
垢版 |
2021/11/29(月) 00:43:30.91ID:UEkaTEcQ
行列の掛け算とか対角化ならPythonかマキシマでいいとおもうが?
大規模だともしかしたらC++のほうが早いかもしれないが
PythonだとGoogle ColaboratoryとかでGPUをネットワーク使用できたりするが



Colaboratory とは
Colaboratory(略称: Colab)は、ブラウザから Python を記述、実行できるサービスです。次の特長を備えています。
環境構築が不要
GPU への無料アクセス
簡単に共有
https://colab.research.google.com/notebooks/welcome.ipynb
2021/11/29(月) 01:05:44.61ID:roEk3hNb
宣伝はお断りしています
2021/11/29(月) 06:13:36.91ID:i8Ax0msm
>>179
BLASというとvalarrayだね
2021/11/29(月) 11:31:29.88ID:W4Pu+K5+
>>183
は?
185デフォルトの名無しさん
垢版 |
2021/11/29(月) 14:27:16.33ID:Afxc3rI9
>PHPはC++のスクリプト版といえるかのように文法・関数が似てる

迷惑するから出鱈目言うな
2021/11/29(月) 14:43:58.00ID:cgXmRWbT
因果が逆だろう。
似た使い方しかしない人間にとっては似て見えるということもあるんだろうさ。
2021/11/29(月) 14:54:09.52ID:Swm9PZmw
いや激しく誤解を生む情報だと思うw
2021/11/29(月) 15:15:20.73ID:zo5XubVi
制御構文が似ていれば似ているように見える人というのは一定数いる
それしか使わないから
2021/11/29(月) 15:19:08.39ID:LzdsKRCS
C++のこともphpのことも両方ニワカじゃないとなかなか出てこない発言
昨日今日入門書めくってるくらいのレベルじゃないとなかなかできない発言
2021/11/30(火) 09:50:00.96ID:abbimJAH
template<class T>
void f(T x) {
auto a = x, b = 0;
}

f(0.0);

これgccだとコンパイル通るけど規格的にはダメだよね?
191デフォルトの名無しさん
垢版 |
2021/11/30(火) 09:57:35.75ID:+4eAilPB
ok
2021/11/30(火) 10:46:34.33ID:LDqTXpbe
何が駄目になるの?
2021/11/30(火) 10:48:39.10ID:b4Wv8Im2
autoの推定がxから導かれるdoubleと0から導かれるintで矛盾しないかって話
2021/11/30(火) 10:51:24.87ID:icNXz82r
そもそも何の規格だよ
問題あるなら書き直せばいいだろ
2021/11/30(火) 10:58:47.10ID:b4Wv8Im2
>>190
clは弾くぞ
2021/11/30(火) 11:18:37.50ID:rIKeeiBO
https://eel.is/c++draft/dcl.type.auto.deduct#def:placeholder_type_deduction
For a variable declared with a type that contains a placeholder type, T is the declared type of the variable.

https://eel.is/c++draft/dcl.spec.auto.general#7
The type of each declared variable is determined by placeholder type deduction, and if the type that replaces the placeholder type is not the same in each deduction, the program is ill-formed.

Draft これでいいか分からんけど、多分ダメですね
a と b は個別に型推論して、同一でなかったら ill-formed であると読める
2021/11/30(火) 11:29:55.04ID:dtpnJADB
https://wandbox.org/permlink/GOps3Ikgl1VsvwoU
gcc6.3.0以下とclangだとちゃんとエラーになるな
2021/11/30(火) 11:33:54.11ID:dtpnJADB
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79009
2021/11/30(火) 11:34:06.53ID:LDqTXpbe
0の部分static_castしなきゃ駄目ということか。なるほど
2021/11/30(火) 13:11:18.23ID:b4Wv8Im2
g++ 10.3.0は-pedantic指定しても通すな
2021/11/30(火) 13:27:36.30ID:icNXz82r
バカか
0は何にだって成れるだろ
202デフォルトの名無しさん
垢版 |
2021/11/30(火) 13:38:43.96ID:rrAtEbdN
C++とPHPが似てないというニカワかと?
Pythonやルビーやjavascriptよりも似てるだろ?
C++にある関数をそのままPHPでも使えるようにしてあるのが多いし
2021/11/30(火) 13:39:41.94ID:b4Wv8Im2
>>201
これやってみ
cout << typeid(0).name();
204デフォルトの名無しさん
垢版 |
2021/11/30(火) 14:06:04.92ID:+4eAilPB
>>202
そんなだから馬鹿って言われるんだ
2021/11/30(火) 18:50:06.68ID:5lYBSuU/
C++Builder使った後にVisual Studio使って、
二層作ったらC++Builderがめちゃくちゃ簡単で
作りやすかったんですけど私の感覚、何か変?
Visual Studioより効率いい気がしました。
2021/11/30(火) 19:29:52.87ID:32XX4NDe
20年以上前ならいざしらず今C++Builderなんて使おうとする人は変としか・・・
207デフォルトの名無しさん
垢版 |
2021/11/30(火) 19:37:40.43ID:TJjyIr2u
普通はRust使うよね。
2021/11/30(火) 19:38:36.27ID:ARnSQzz0
くそ言語Rust
2021/11/30(火) 19:52:55.16ID:icNXz82r
c#だろ
バカめが
2021/11/30(火) 20:01:01.54ID:xp1LudPy
20年以上前は言い過ぎ
自分は2009を大事に使っている
2021/11/30(火) 21:27:19.33ID:32XX4NDe
うちでは2000年以降のborlandはそれ以前に開発されたものの保守以外で使用することはなかったから
2000年以前でもほぼMSVCの独壇場だった
2021/11/30(火) 21:31:10.33ID:XVXDilRK
BuilderというよりRAD Studioやろ?
2021/12/01(水) 23:25:36.03ID:toM1ybPg
>>14
数学記号増やしたところで、数学記号はレイアウトの問題がかなりついて回るのであまり意味ないと思うけどなあ。2^2^2^2とか、定積分とか、分数とか表現できないでしょ。
そういうのは組版の問題。
まあ、たしかにイタリックのxとかはあるのに、イタリック(?)のπはないとかは、中途半端な気はするけどね。
2021/12/02(木) 08:09:16.16ID:5C7dh5cI
std::set にラムダ式渡すとき
std::set<T, decltype(comp)> s(comp);
ってなるのダサすぎるんだけどどうにかならない?
std::set<T> s([](T x, T y) { return x < y; });
みたいに直接書きたい

make_set みたいな関数テンプレート用意すれば解決するのはわかるんだけどクラステンプレートだとどうしてダメなんだ

あとこれが自作クラスだった場合推論補助とかでどうにかできるんだろうか
2021/12/02(木) 08:50:46.97ID:boATToTk
>>214
これなら通るんだけど
template <typename T> std::set(T(&)(T,T)) -> std::set<T, T(&)(T,T)>;
int comp(int x, int y) { return x < y; }
std::set s(comp);

compをラムダやテンプレートにするとdeductionに失敗するね
2021/12/02(木) 08:57:10.12ID:l5gglxms
>>213
だからさー、あなたが使うフォントで期待したπが表示されないのはフォントのデザイナの問題であってunicodeの問題じゃない
ちゃんと区別できるようになってるんだから
2021/12/02(木) 10:08:07.72ID:0ZST/pCU
>>214 std::function<bool (T,T)> 使っちゃダメなの?
218デフォルトの名無しさん
垢版 |
2021/12/02(木) 15:14:03.44ID:2R2gcOCs
πの人まだいたんだなω
2021/12/02(木) 16:55:10.70ID:BMPRSKoA
>>216
どうでもいい絵文字よりは、数学記号は考慮してほしかったですよね
というかピクトグラムの意味がわかりません、漢字の方がマシ
2021/12/02(木) 18:05:22.46ID:X/wGilGd
>>219
>>46

Mathematical Italic Small Pi
ttps://www.compart.com/en/unicode/U+1D70B

Mathematical Alphanumeric Symbols
ttps://www.compart.com/en/unicode/block/U+1D400

で、何だっけ?
イタリック(?)のπはない、だったっけ?
2021/12/02(木) 18:17:52.07ID:BMPRSKoA
>>220
せめて
https://meta.wikimedia.org/wiki/Help:Displaying_a_formula/ja
に載っている文字は全部表示してほしいですね… >>220 は全然足りないとおもいますよ
2021/12/02(木) 19:00:15.54ID:xMkISEUv
>>221
https://www.compart.com/en/unicode/search?q=math#blocks
なんか抜けているのあったっけ?

Arrowをmath専用にして欲しいとか?
https://www.compart.com/en/unicode/search?q=arrow#blocks
2021/12/02(木) 20:38:05.02ID:MbA5frdV
>>214
std::set s(std::initializer_list<T>{}, [](T x, T y){return x < y;});
とかどうやろ
2021/12/02(木) 20:50:59.39ID:rnInpLg+
>>215
ありがとう
悲しい
>>217
比較関数って内部でめちゃくちゃ呼ばれるんでパフォーマンスが気になっちゃう
>>223
なるほどTも推論させればいいのか
トリッキーだけど一番思ってたのに近いかも、ありがとう
2021/12/02(木) 23:20:50.87ID:kbM6t4K6
C++20なら、こんな書き方はできる
std::set<T, decltype([](T x, T y) { return x < y; })> s;

https://cpprefjp.github.io/lang/cpp20/default_constructible_and_assignable_stateless_lambdas.html
2021/12/05(日) 09:34:11.45ID:nrpyYaDv
(float) std::sin(3.14);
これの三角関数の左の(float)ってどういう意味ですか??
2021/12/05(日) 09:47:34.80ID:s0V2liBt
キャストでぐぐれ
2021/12/05(日) 11:30:58.25ID:nrpyYaDv
あなるほど
C形式のキャストでdoubleからfloatに変換してるんですね
2021/12/05(日) 12:19:36.79ID:ZXOJuLfE
× C形式
○ キャスト記法
2021/12/05(日) 18:20:14.63ID:jjkrjYLo
C形式のキャストでええやろ
C++ならstatic_castでキャストするべきところ
2021/12/05(日) 18:26:41.52ID:BgqX0HXa
精度がfloatでいいならsinf使え
2021/12/05(日) 19:23:24.64ID:ZXOJuLfE
>>230
いや、そうではなくJIS規格で定められた用語ってこと

・・・まあね、フレンドが随伴とかちょっと・・・なところあるんだけど
2021/12/05(日) 20:16:51.63ID:DeLDBVlq
いまだに用語警察っているんだなw
2021/12/05(日) 20:29:45.29ID:jjkrjYLo
C++11以降にJIS規格は存在しないし, ぶっちゃけ本当に誰もキャスト形式なんて呼んでないし (T) cast-expression とさえ呼ばれない。
C++ Core GuidelinesやgccやclangでもC-style(やold-style)と表現しているのだからそんな古臭い分かりにくい用語を押し付ける必然性がない

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Pro-type-cstylecast
2021/12/05(日) 20:34:58.49ID:CHJdF2OL
用語の間違いで意味の取り違えが起きるような場面ならはっきりさせておくべきだが今回はどうでもいいな。
2021/12/06(月) 07:47:05.01ID:g0v08EwR
>>234
キャスト形式?
何に対する意見を言っているんだ?
2021/12/06(月) 08:09:01.81ID:3cd7zaNc
また下らん揚げ足取り君が来たw
2021/12/06(月) 18:36:58.89ID:g0v08EwR
揚げ足じゃねえよ
話の根幹に拘わることだ

まともに反駁できないなら
黙っているのが得策だぞ
2021/12/06(月) 21:16:52.28ID:dR0HZDjS
訂正の益があったとしても(今回は全くなさそうだが)用語警察は不要
書き込みの意味が文脈から一意であれば問題ない
黙ってろ
2021/12/06(月) 21:23:49.13ID:XPddKxbx
constructorとdestructorを常に生成子・消去子と呼んでる者だけがJIS規格を振り回しなさい
2021/12/06(月) 22:13:15.88ID:Zqmej2qN
オレ用語を高圧的な態度で押しつけてくるやつとは仕事したくねえ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況