前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/
C++相談室 part159
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2022/02/19(土) 11:56:42.14ID:kSnJ/KwP426デフォルトの名無しさん
2022/03/07(月) 21:58:54.49ID:2Lq6XwwP 昔からキチガイがシンボルに日本語使ってたりしたし、規格仕様の該当項目も挙げてないのに可能というのはおかしく
またソースコードや出力設定が何かに依るのが正しい可能性だって普通にある
またutf8というかunicodeとそのエンコーディング形式は簡単な計算式で可換
200行あればvc++固有ならmagic_enumの使用機能全て載せられるし、そもそも不要
そもそも情報小出しな時点、puts使ったりしてる時点、vc++を好き好んで使ってる時点でもうね・・・
挙げ句説明なくても5分もあれば気づくことに何日かかってるのかって人のプルリクが通るわけないだろw
またソースコードや出力設定が何かに依るのが正しい可能性だって普通にある
またutf8というかunicodeとそのエンコーディング形式は簡単な計算式で可換
200行あればvc++固有ならmagic_enumの使用機能全て載せられるし、そもそも不要
そもそも情報小出しな時点、puts使ったりしてる時点、vc++を好き好んで使ってる時点でもうね・・・
挙げ句説明なくても5分もあれば気づくことに何日かかってるのかって人のプルリクが通るわけないだろw
427デフォルトの名無しさん
2022/03/07(月) 23:18:01.19ID:ivurCOzA >>425
まぁ面倒だからってよりこのスレにもちらほらいるようにASCII文字だけを想定してて
それだけなら1文字づつキャストするだけで簡単に出来るだろうしusing string_view = std::string_viewの所を上書きできるようにしておくから自前でやってって感じだな
まぁ面倒だからってよりこのスレにもちらほらいるようにASCII文字だけを想定してて
それだけなら1文字づつキャストするだけで簡単に出来るだろうしusing string_view = std::string_viewの所を上書きできるようにしておくから自前でやってって感じだな
428デフォルトの名無しさん
2022/03/07(月) 23:23:59.38ID:2Lq6XwwP 「ASCII文字だけを想定してて」wwwww
429デフォルトの名無しさん
2022/03/07(月) 23:29:43.95ID:m7T5bZFc マクロ騒動で脳が破壊されてしまった子がいるね
430デフォルトの名無しさん
2022/03/07(月) 23:46:00.91ID:47rZ/1iq SEXの時は動かずにマグロになってしまったようですね
やっぱりロボトミー手術してよかったですね
やっぱりロボトミー手術してよかったですね
431デフォルトの名無しさん
2022/03/08(火) 21:56:42.93ID:A5UfccGR432デフォルトの名無しさん
2022/03/08(火) 22:58:13.81ID:2Ie6O3y5 はいはい、一人何役するのかねw
433デフォルトの名無しさん
2022/03/08(火) 23:19:40.19ID:lL5N1LvC >>432
我々ギフハブがいつも見ているぞ
我々ギフハブがいつも見ているぞ
434デフォルトの名無しさん
2022/03/10(木) 18:10:06.68ID:USdHjBxA テンプレートの可変長引数って一般的な実装だとスタックに積まれるの?
てことはあんまり大きいデータは渡せない?
てことはあんまり大きいデータは渡せない?
435デフォルトの名無しさん
2022/03/10(木) 18:17:21.80ID:6o5PvaaD template-parameter-packは実行環境では普通の引数と全く同じだ
翻訳中の解釈でどんな「普通の引数」にするか判断してるだけ
翻訳中の解釈でどんな「普通の引数」にするか判断してるだけ
436デフォルトの名無しさん
2022/03/10(木) 21:39:59.02ID:xy5Q90JZ template<class...T>void f(T...t){}
f(1,2,3,4); で実体化されるf<int,int,int,int>は、
void f(int,int,int,int){}
と同じ扱いをされる。
普通の関数と変わらんよ。
たぶん気にしてるのはこんな感じの再帰実装だろう
template<class First>auto sum(First first){return first;}
template<class First, class Second, class...Rest>
auto sum(First first, Second second, Rest...rest){
return first+sum(second, rest...);
}
sum(1,2,3,4,5,6,7,8,9);
最適化なしコンパイルだとクソ真面目に45*sizeof(int)と9段分のリターンアドレスとか諸々をスタックに積む
最適化ありコンパイルなら大体インライン展開されるからさほど大事にはならない
f(1,2,3,4); で実体化されるf<int,int,int,int>は、
void f(int,int,int,int){}
と同じ扱いをされる。
普通の関数と変わらんよ。
たぶん気にしてるのはこんな感じの再帰実装だろう
template<class First>auto sum(First first){return first;}
template<class First, class Second, class...Rest>
auto sum(First first, Second second, Rest...rest){
return first+sum(second, rest...);
}
sum(1,2,3,4,5,6,7,8,9);
最適化なしコンパイルだとクソ真面目に45*sizeof(int)と9段分のリターンアドレスとか諸々をスタックに積む
最適化ありコンパイルなら大体インライン展開されるからさほど大事にはならない
437デフォルトの名無しさん
2022/03/11(金) 07:47:35.25ID:GmBPyzdt #include <utility>
template<class First>auto sum(First first){return first;}
template<class First, class... Rest>
auto sum(First first, Rest... rest){
return first+sum(rest...);
}
template <class T, T... Seq>
auto sum_seq(std::integer_sequence<T, Seq...>) {
return sum(Seq...);
}
int main() {
return sum_seq(std::make_index_sequence<100>());
}
こんな感じになるよ
https://godbolt.org/z/obj4ra671
途中経過のテンプレートも全て関数実体として展開される
最適化すると、この例だと全部定数で計算されるけど
template<class First>auto sum(First first){return first;}
template<class First, class... Rest>
auto sum(First first, Rest... rest){
return first+sum(rest...);
}
template <class T, T... Seq>
auto sum_seq(std::integer_sequence<T, Seq...>) {
return sum(Seq...);
}
int main() {
return sum_seq(std::make_index_sequence<100>());
}
こんな感じになるよ
https://godbolt.org/z/obj4ra671
途中経過のテンプレートも全て関数実体として展開される
最適化すると、この例だと全部定数で計算されるけど
438デフォルトの名無しさん
2022/03/11(金) 08:12:59.76ID:GmBPyzdt 流石にちょっと説明追加しておきます。
sum_seq(std::make_index_sequence<100>())の部分は
sum(0,1,2,3,...,97,98,99)と同じです。
sum(0,1,2,3,...,97,98,99)は
sum(0) + sum(1,2,3,...,97,98,99)で計算されます。第2項の
sum(1,2,3,...,97,98,99)は
sum(1) + sum(2,3,...,97,98,99)で計算されます。第2項の
sum(2,3,...,97,98,99)は
...
sum(98,99)は
sum(98) + sum(99)で計算されます。
つまりすごい再起的に呼び出してバカ正直に壮絶な計算をするため、スタック消費も大きいということ。
sum_seq(std::make_index_sequence<100>())の部分は
sum(0,1,2,3,...,97,98,99)と同じです。
sum(0,1,2,3,...,97,98,99)は
sum(0) + sum(1,2,3,...,97,98,99)で計算されます。第2項の
sum(1,2,3,...,97,98,99)は
sum(1) + sum(2,3,...,97,98,99)で計算されます。第2項の
sum(2,3,...,97,98,99)は
...
sum(98,99)は
sum(98) + sum(99)で計算されます。
つまりすごい再起的に呼び出してバカ正直に壮絶な計算をするため、スタック消費も大きいということ。
439デフォルトの名無しさん
2022/03/11(金) 08:30:00.26ID:bj9xq9MP おれおれtemplateの例ですね。
440デフォルトの名無しさん
2022/03/11(金) 11:44:15.06ID:yxfxX1kD 普通はテンプレつかった可変引数でも、イニシャライザでforで回して足して終わりっしょ。
なぜ自分で再帰にして書くのやら。
なぜ自分で再帰にして書くのやら。
441デフォルトの名無しさん
2022/03/11(金) 12:14:25.50ID:GmBPyzdt >>440
一般には可変長テンプレート引数の型が一律とは限らないので
一般には可変長テンプレート引数の型が一律とは限らないので
442デフォルトの名無しさん
2022/03/11(金) 12:45:09.09ID:FGXUCKCr443デフォルトの名無しさん
2022/03/11(金) 19:55:16.89ID:XC1WHC10 constexprでやればいいじゃん
444デフォルトの名無しさん
2022/03/11(金) 19:58:15.85ID:bj9xq9MP なんでもtemplateにしたい病なんですよ。プロジェクトで一番迷惑なタイプです。
おれおれtemplateは可読性、保守性が一気に落ちるので勘弁してください。
おれおれtemplateは可読性、保守性が一気に落ちるので勘弁してください。
445デフォルトの名無しさん
2022/03/11(金) 20:09:30.59ID:rOwnBpGX 読む方は溜まったもんじゃないが書くのも実行速度もなんだかんだテンプレートが一番早いんで…
446デフォルトの名無しさん
2022/03/11(金) 21:26:30.13ID:FGXUCKCr >>444
純コンパイラ方式の言語を使ってるのに
中間コードを使わにゃならんところが出てくると
残念な気持ちにならん?
もっと極端に言うとアセンブラからBASICやBATを呼び出すようなこと
人それぞれで何も感じない人っているのかね
純コンパイラ方式の言語を使ってるのに
中間コードを使わにゃならんところが出てくると
残念な気持ちにならん?
もっと極端に言うとアセンブラからBASICやBATを呼び出すようなこと
人それぞれで何も感じない人っているのかね
447デフォルトの名無しさん
2022/03/11(金) 22:03:21.13ID:GmBPyzdt 例えばさっきのシーケンスをランダムな数字をその場で生成みたいな感じにすると、
#include <random>
#include <iostream>
#include <utility>
using namespace std;
template<class First>auto sum(First first){return first;}
template<class First, class... Rest> auto sum(First first, Rest... rest){return first+sum(rest...);}
template<class... Args> auto print_and_sum(Args... args) {
for (auto e: {args...}) cout << e << endl; // ココ
return sum(args...);
}
template <typename F, size_t... Seq> auto gen_and_print_and_sum_impl(F func, index_sequence<Seq...> ) {
return print_and_sum(func(Seq)...);
}
int main() {
random_device seed_gen;
mt19937 engine(seed_gen());
const size_t n = 3;
cout << gen_and_print_and_sum_impl(
[&](size_t i){ return engine();},
std::make_index_sequence<n>{}) << endl;
return 0;
}
こんな感じになるけど、genとprintとsumを分けたいとなるとtupleにしたくなって、templateでparameter packとtupleを行き来することになり、結構煩雑になる気はする
今は分けずに初期化リストにぶち込んで誤魔化してるけど…
こういうのも分けてtemplateにする?
#include <random>
#include <iostream>
#include <utility>
using namespace std;
template<class First>auto sum(First first){return first;}
template<class First, class... Rest> auto sum(First first, Rest... rest){return first+sum(rest...);}
template<class... Args> auto print_and_sum(Args... args) {
for (auto e: {args...}) cout << e << endl; // ココ
return sum(args...);
}
template <typename F, size_t... Seq> auto gen_and_print_and_sum_impl(F func, index_sequence<Seq...> ) {
return print_and_sum(func(Seq)...);
}
int main() {
random_device seed_gen;
mt19937 engine(seed_gen());
const size_t n = 3;
cout << gen_and_print_and_sum_impl(
[&](size_t i){ return engine();},
std::make_index_sequence<n>{}) << endl;
return 0;
}
こんな感じになるけど、genとprintとsumを分けたいとなるとtupleにしたくなって、templateでparameter packとtupleを行き来することになり、結構煩雑になる気はする
今は分けずに初期化リストにぶち込んで誤魔化してるけど…
こういうのも分けてtemplateにする?
448デフォルトの名無しさん
2022/03/11(金) 22:03:23.71ID:bj9xq9MP449デフォルトの名無しさん
2022/03/11(金) 22:52:13.11ID:GmBPyzdt ちなみに分けてテンプレートにしてみた。もう1レスに収まらないので消えたらごめんw
https://godbolt.org/z/YoxG7b4ro
https://godbolt.org/z/YoxG7b4ro
450デフォルトの名無しさん
2022/03/11(金) 23:14:03.97ID:GmBPyzdt #include <random>
#include <iostream>
#include <tuple>
using namespace std; // 余計なコード消したらギリギリ入ったw
template<class First>auto sum(First first){return first;}
template<class First, class... Rest> auto sum(First first, Rest... rest){return first+sum(rest...);}
template<typename T, size_t... Seq>
auto sum_tpl_impl(const T& tpl, index_sequence<Seq...>) {return sum(get<Seq>(tpl)...);}
template<typename... Types> auto sum_tpl(const tuple<Types...>& tpl) {
return sum_tpl_impl(tpl, make_index_sequence<tuple_size<tuple<Types...>>{}>{});
}
template <typename T, typename F, T... Seq> auto gen_impl(F func, index_sequence<Seq...>) {
return make_tuple(func(Seq)...);
}
template <size_t N, typename F> auto gen(F func) {
return gen_impl<decltype((func)(0))>(func, make_index_sequence<N>{});
}
template <typename T, size_t... Seq> void print_impl(const T& tpl, index_sequence<Seq...>) {
for (auto e: {get<Seq>(tpl)...}) cout << e << endl;
}
template <typename T> void print(const T& tpl) {
print_impl(tpl, make_index_sequence<tuple_size<T>{}>{});
}
int main() {
random_device seed_gen;
mt19937 engine(seed_gen());
const size_t n = 3;
const auto tpl = gen<n>([&](size_t i){ return engine();});
print(tpl);
cout << sum_tpl(tpl) << endl;
return 0;
}
#include <iostream>
#include <tuple>
using namespace std; // 余計なコード消したらギリギリ入ったw
template<class First>auto sum(First first){return first;}
template<class First, class... Rest> auto sum(First first, Rest... rest){return first+sum(rest...);}
template<typename T, size_t... Seq>
auto sum_tpl_impl(const T& tpl, index_sequence<Seq...>) {return sum(get<Seq>(tpl)...);}
template<typename... Types> auto sum_tpl(const tuple<Types...>& tpl) {
return sum_tpl_impl(tpl, make_index_sequence<tuple_size<tuple<Types...>>{}>{});
}
template <typename T, typename F, T... Seq> auto gen_impl(F func, index_sequence<Seq...>) {
return make_tuple(func(Seq)...);
}
template <size_t N, typename F> auto gen(F func) {
return gen_impl<decltype((func)(0))>(func, make_index_sequence<N>{});
}
template <typename T, size_t... Seq> void print_impl(const T& tpl, index_sequence<Seq...>) {
for (auto e: {get<Seq>(tpl)...}) cout << e << endl;
}
template <typename T> void print(const T& tpl) {
print_impl(tpl, make_index_sequence<tuple_size<T>{}>{});
}
int main() {
random_device seed_gen;
mt19937 engine(seed_gen());
const size_t n = 3;
const auto tpl = gen<n>([&](size_t i){ return engine();});
print(tpl);
cout << sum_tpl(tpl) << endl;
return 0;
}
451デフォルトの名無しさん
2022/03/12(土) 13:11:11.84ID:uDPm4ane 大学で下記のようなSTLアルゴリズムの課題が出たのですが、全然わからないです
Hogeというstructがあったときに、
class HogeCollection {
public:
void display(ostream& os) const;
friend ostream& operator << (ostream& os, const Hoge& hoge);
private:
vector<Hoge> m_hoges;
};
display関数でm_hogesのすべてのHogeに対して os <<を呼び出し出力させなさい。
ただしforやwhileなどの手動ループを使用しないこと。
Hogeというstructがあったときに、
class HogeCollection {
public:
void display(ostream& os) const;
friend ostream& operator << (ostream& os, const Hoge& hoge);
private:
vector<Hoge> m_hoges;
};
display関数でm_hogesのすべてのHogeに対して os <<を呼び出し出力させなさい。
ただしforやwhileなどの手動ループを使用しないこと。
452デフォルトの名無しさん
2022/03/12(土) 13:12:32.40ID:aEfI8PjB >>450
ちょっとバグってたので修正
template <typename F, size_t... Seq> auto gen_impl(F func, index_sequence<Seq...>) {
return make_tuple(func(Seq)...);
}
template <size_t N, typename F> auto gen(F func) {
return gen_impl(func, make_index_sequence<N>{});
}
ちょっとバグってたので修正
template <typename F, size_t... Seq> auto gen_impl(F func, index_sequence<Seq...>) {
return make_tuple(func(Seq)...);
}
template <size_t N, typename F> auto gen(F func) {
return gen_impl(func, make_index_sequence<N>{});
}
453デフォルトの名無しさん
2022/03/12(土) 13:14:20.70ID:aEfI8PjB >>451
言われた通りにやればいいやん
言われた通りにやればいいやん
455デフォルトの名無しさん
2022/03/12(土) 13:21:05.85ID:45uBSPYW 「STLアルゴリズム」の課題だからSTL使えばいいんだもんな…
自分でアルゴリズム実装しろって課題だったらちょっと面倒だが
自分でアルゴリズム実装しろって課題だったらちょっと面倒だが
456デフォルトの名無しさん
2022/03/12(土) 13:21:47.65ID:uDPm4ane457デフォルトの名無しさん
2022/03/12(土) 13:55:39.46ID:uDPm4ane 度々すみません。
display関数を書いたのですが、VS2019でコンパイルエラーになります。
void HogeCollection::display(ostream& out) const
{
std::for_each(m_hoges.begin(), m_hoges.end(), [](const Hoge& hoge){ out << hoge; });
}
error C3493: 既定のキャプチャ モードが指定されていないため、'out' を暗黙的にキャプチャできません
display関数を書いたのですが、VS2019でコンパイルエラーになります。
void HogeCollection::display(ostream& out) const
{
std::for_each(m_hoges.begin(), m_hoges.end(), [](const Hoge& hoge){ out << hoge; });
}
error C3493: 既定のキャプチャ モードが指定されていないため、'out' を暗黙的にキャプチャできません
458デフォルトの名無しさん
2022/03/12(土) 14:02:30.95ID:9rXKBdgd キャプチャモードを指定してあげれば…
459デフォルトの名無しさん
2022/03/12(土) 14:09:52.70ID:uDPm4ane460デフォルトの名無しさん
2022/03/12(土) 21:02:47.42ID:uDPm4ane もう1つ、STLの問題がわからないので、質問させてください。
>>451のHogeCollectionに以下のようなメンバ関数があるとします。
void sort_by_key(const string& key)
{
if (key == "a") (Hogeのメンバ変数 m_aでソート);
else if (key == "b") (Hogeのメンバ変数 m_bでソート);
}
keyの値が"a" か "b"以外のときはエラーにしたい場合に、
実行時エラーでなくコンパイルエラーにするには、
この関数をどのように再設計すればよいでしょうか。
>>451のHogeCollectionに以下のようなメンバ関数があるとします。
void sort_by_key(const string& key)
{
if (key == "a") (Hogeのメンバ変数 m_aでソート);
else if (key == "b") (Hogeのメンバ変数 m_bでソート);
}
keyの値が"a" か "b"以外のときはエラーにしたい場合に、
実行時エラーでなくコンパイルエラーにするには、
この関数をどのように再設計すればよいでしょうか。
461デフォルトの名無しさん
2022/03/12(土) 21:08:31.31ID:yBTVs/aF keyの値はコンパイル時に決まるん?
462デフォルトの名無しさん
2022/03/12(土) 21:49:16.97ID:uDPm4ane463デフォルトの名無しさん
2022/03/12(土) 22:30:59.53ID:olrB42jq >>462
コンパイル時にkeyを見てチェックするという縛りなら、実行時になるまでkeyがわからない状態にはできない。
雑にやってしまうならこうなる。
真面目にやるならフィールドへのポインタをテンプレート引数にすることになると思う
template<char key>
void sort_by_key()
{
if constexpr (key == 'a') (Hogeのメンバ変数 m_aでソート);
else if constexpr (key == 'b') (Hogeのメンバ変数 m_bでソート);
else throw std::invalid_argument();
}
コンパイル時にkeyを見てチェックするという縛りなら、実行時になるまでkeyがわからない状態にはできない。
雑にやってしまうならこうなる。
真面目にやるならフィールドへのポインタをテンプレート引数にすることになると思う
template<char key>
void sort_by_key()
{
if constexpr (key == 'a') (Hogeのメンバ変数 m_aでソート);
else if constexpr (key == 'b') (Hogeのメンバ変数 m_bでソート);
else throw std::invalid_argument();
}
464デフォルトの名無しさん
2022/03/12(土) 22:46:39.28ID:uDPm4ane465デフォルトの名無しさん
2022/03/13(日) 18:52:37.38ID:mTtq0Uph ポインタとか文字列の勉強をしていてよくわからなくなってしまいました
char* test(char* &s){
char* ans=“B”;
s[0]=‘C’;
s=ans;
return ans;
}
int main(int argc,char *argv[]){
char s1[]=“A”;
char* s2=s1;
#if 1
cout<<s2;
cout<<test(s2);
cout<<s2;
#else
cout<<s2<<test(s2)<<s2;
#endif
return 0;
}
上のようなものを動かす時、#if 1のときはABBと表示されて、#elseにするとBBCと表示されます
#elseのように一行にまとめた時に何が起こっているのかよくわからないので教えていただけると嬉しいです
よろしくお願いします
char* test(char* &s){
char* ans=“B”;
s[0]=‘C’;
s=ans;
return ans;
}
int main(int argc,char *argv[]){
char s1[]=“A”;
char* s2=s1;
#if 1
cout<<s2;
cout<<test(s2);
cout<<s2;
#else
cout<<s2<<test(s2)<<s2;
#endif
return 0;
}
上のようなものを動かす時、#if 1のときはABBと表示されて、#elseにするとBBCと表示されます
#elseのように一行にまとめた時に何が起こっているのかよくわからないので教えていただけると嬉しいです
よろしくお願いします
466デフォルトの名無しさん
2022/03/13(日) 18:56:08.61ID:wqc4hozV ポインタじゃなくて評価順の問題なのはわかるが
何が起きてるのかは俺もようわからん
何が起きてるのかは俺もようわからん
467デフォルトの名無しさん
2022/03/13(日) 19:00:28.93ID:wF3w3WV7 char*&なんて20年C++プログラマやってて一度も使ったことないわ…
どういうときに必要になるん?
どういうときに必要になるん?
468デフォルトの名無しさん
2022/03/13(日) 19:02:39.85ID:mTtq0Uph 必要ないとは思うんですけど、理解を確かめるために色々試していたって感じです
469デフォルトの名無しさん
2022/03/13(日) 19:02:42.19ID:uIbezUFD >>467
おっちゃんやん
おっちゃんやん
470デフォルトの名無しさん
2022/03/13(日) 19:05:39.12ID:wqc4hozV あーわかったけど説明めんどくさいな
とりあえず、if 1では1行ずつ評価(今の場合表示と読み替えても良い)が行われてるが
2行目の場合、評価(表示)の前に途中で関数が実行されて、値が書き換えられている、とだけ
とりあえず、if 1では1行ずつ評価(今の場合表示と読み替えても良い)が行われてるが
2行目の場合、評価(表示)の前に途中で関数が実行されて、値が書き換えられている、とだけ
471デフォルトの名無しさん
2022/03/13(日) 19:06:08.61ID:e39Fa4ck コレ質問してるのもおっちゃん臭いんだよな
いつもVC++だし、MFCみたいな書き方するし
いつもVC++だし、MFCみたいな書き方するし
472デフォルトの名無しさん
2022/03/13(日) 19:06:22.60ID:wqc4hozV 誤 2行目の場合→正 elseの場合
473デフォルトの名無しさん
2022/03/13(日) 19:12:14.63ID:wF3w3WV7 >>469
おう、最近白髪が気になってきた
おう、最近白髪が気になってきた
474デフォルトの名無しさん
2022/03/13(日) 19:20:55.04ID:e39Fa4ck そして答えてるのも同じおっちゃんw
475デフォルトの名無しさん
2022/03/13(日) 19:22:15.18ID:e39Fa4ck そもそもそんな怪しいコーディングは普通のC++プログラマはしないから
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
476はちみつ餃子 ◆8X2XSCHEME
2022/03/13(日) 19:38:16.17ID:lhgOY5DD 文字列リテラルの型は const char[] だが、 C++03 時代は const をはがして char* に (暗黙に) 型変換することが許されていた。
文字列リテラル限定の特別な型変換規則。
C++11 以降ではその規則は削除された。
C++03 時代でも非推奨なんだけど昔の本だとちょくちょくやってるんだよなぁ。
俺は持ってないから知らんけどロベール本とか有名な本でもそういう記述があるらしい。
文字列リテラル限定の特別な型変換規則。
C++11 以降ではその規則は削除された。
C++03 時代でも非推奨なんだけど昔の本だとちょくちょくやってるんだよなぁ。
俺は持ってないから知らんけどロベール本とか有名な本でもそういう記述があるらしい。
477デフォルトの名無しさん
2022/03/13(日) 19:51:18.33ID:hJwK9XXb ロベール本は<iostream.h>とか書いてあったしC++03ですらないんじゃない?
478デフォルトの名無しさん
2022/03/13(日) 19:54:43.65ID:mTtq0Uph >>470
すみませんやっぱりよくわからなかったです
アドレスとか調べてみてみました
元の初期化されたばかりのs2を@、ansをAとします
•#if1において
最初の(1行目の)s2は@を指している
最後の(3行目の)s2はAを指している
•#elseにおいて
最初の(左の)s2はAを指している
最後の(右の)s2は@を指している
どうやらこうなっているようなのですが、なぜ逆になるのでしょうか?
すみませんやっぱりよくわからなかったです
アドレスとか調べてみてみました
元の初期化されたばかりのs2を@、ansをAとします
•#if1において
最初の(1行目の)s2は@を指している
最後の(3行目の)s2はAを指している
•#elseにおいて
最初の(左の)s2はAを指している
最後の(右の)s2は@を指している
どうやらこうなっているようなのですが、なぜ逆になるのでしょうか?
479デフォルトの名無しさん
2022/03/13(日) 20:06:11.90ID:GnTJD4Pm480デフォルトの名無しさん
2022/03/13(日) 20:12:18.98ID:e39Fa4ck そんな調べれば一瞬で分かるようなこと自分で調べろよおっさんw
481デフォルトの名無しさん
2022/03/13(日) 20:13:33.25ID:e39Fa4ck お前の間違いをいちいち指摘するのは最近もう面倒w ヒントはあげたしw
482デフォルトの名無しさん
2022/03/13(日) 20:14:46.38ID:mTtq0Uph あなたには聞いたつもりはないのですけど…
483蟻人間 ◆T6xkBnTXz7B0
2022/03/13(日) 20:18:18.08ID:+6IhxTlU どいつもこいつもおっさん
484デフォルトの名無しさん
2022/03/13(日) 20:28:56.19ID:GnTJD4Pm おっさんって大体C++17以降アレルギーもってるよな
言語の進化に付いていくのをやめると新機能への愚痴ばかり言う老害になっちゃうんだよな
ああはなりたくないからC++40くらいまでは初心を忘れず学習し続けると心に誓うわ
言語の進化に付いていくのをやめると新機能への愚痴ばかり言う老害になっちゃうんだよな
ああはなりたくないからC++40くらいまでは初心を忘れず学習し続けると心に誓うわ
485蟻人間 ◆T6xkBnTXz7B0
2022/03/13(日) 20:35:15.04ID:+6IhxTlU WinXPをサポートしている最新のC++規格となると選択肢が少なくなるのが嫌になる。
486デフォルトの名無しさん
2022/03/13(日) 20:35:18.33ID:R0s3zSYd Rustに変わるのでは?
487デフォルトの名無しさん
2022/03/13(日) 20:56:20.40ID:e39Fa4ck linuxだとgcc 9か10がデフォルトだし、9,10のデフォルトのc++標準は14だから
現状17,20は断らないと使えないので、自分で使う分以外は可能なら11、無理でも14までにしたいというだけ
VC++2022を除き20はデフォルトだと使えないので、自分で使う分でも20は滅多に使わない
twitterとかで記事を見かけたら23までは内容見たりするけど、自分で追っかけるのは17まで、興味があれば20までかな
23だとrangeがすごいことになってるみたいね
現状17,20は断らないと使えないので、自分で使う分以外は可能なら11、無理でも14までにしたいというだけ
VC++2022を除き20はデフォルトだと使えないので、自分で使う分でも20は滅多に使わない
twitterとかで記事を見かけたら23までは内容見たりするけど、自分で追っかけるのは17まで、興味があれば20までかな
23だとrangeがすごいことになってるみたいね
488デフォルトの名無しさん
2022/03/13(日) 20:57:02.88ID:BWiYjhGb >>478
評価の順と関数の実行が同じとは限らない。
だったかな
要するに cout<<s2@<<test(s2)A<<s2B;
君の考えでは@の評価、関数test(s2)Aが実行されtest(s2)Aの評価、最後にs2Bが評価される、だろうけど
実際には先ににtest(s2)Aが実行され、その後s2@の評価、test(s2)Aの評価、s2Bの評価と続く
って感じと思う
評価の順と関数の実行が同じとは限らない。
だったかな
要するに cout<<s2@<<test(s2)A<<s2B;
君の考えでは@の評価、関数test(s2)Aが実行されtest(s2)Aの評価、最後にs2Bが評価される、だろうけど
実際には先ににtest(s2)Aが実行され、その後s2@の評価、test(s2)Aの評価、s2Bの評価と続く
って感じと思う
489デフォルトの名無しさん
2022/03/13(日) 20:57:21.78ID:GnTJD4Pm490蟻人間 ◆T6xkBnTXz7B0
2022/03/13(日) 20:59:06.58ID:+6IhxTlU LinuxでDirty Pipeの脆弱性が出たからバージョンアップしとけよ。
491デフォルトの名無しさん
2022/03/13(日) 21:22:04.20ID:mTtq0Uph >>488
>>489
ありがとうございます
https://cpprefjp.github.io/lang/cpp17/expression_evaluation_order.html
それっぽいのを見つけたので詳しく読んでみたと思います
言語のバージョンは多分C++11てやつです
GCC4.4.0のコンパイラーでした
本の付録についてきたものですが、結構古いやつだったみたいです
コンパイラー新しくすればもしかしたら動くのかもしれないですけど、あんまりこういうことはしないほうが安全なんでしょうかね
>>489
ありがとうございます
https://cpprefjp.github.io/lang/cpp17/expression_evaluation_order.html
それっぽいのを見つけたので詳しく読んでみたと思います
言語のバージョンは多分C++11てやつです
GCC4.4.0のコンパイラーでした
本の付録についてきたものですが、結構古いやつだったみたいです
コンパイラー新しくすればもしかしたら動くのかもしれないですけど、あんまりこういうことはしないほうが安全なんでしょうかね
492デフォルトの名無しさん
2022/03/13(日) 21:30:44.52ID:5qwn5s+6 >>478
この手の副作用が2つ以上現れるような動作は未規定か環境依存か未定義動作だったりを疑わなきゃいけない
cout<<s2<<test(s2)<<s2; の評価順序は規格で決まってる?
Noならコンパイラの気分次第で変わったりする。
何が起きてるかを知るにはコンパイル結果の逆アセンブリを見るのが一番手っ取り早い
この手の副作用が2つ以上現れるような動作は未規定か環境依存か未定義動作だったりを疑わなきゃいけない
cout<<s2<<test(s2)<<s2; の評価順序は規格で決まってる?
Noならコンパイラの気分次第で変わったりする。
何が起きてるかを知るにはコンパイル結果の逆アセンブリを見るのが一番手っ取り早い
493デフォルトの名無しさん
2022/03/13(日) 21:33:21.26ID:e39Fa4ck ちなみにVC++だと2019のオプション指定なし(C++17)で再現するんだけどねw
494デフォルトの名無しさん
2022/03/13(日) 21:35:03.87ID:e39Fa4ck あ、14だったw
https://godbolt.org/z/fcPT6jjhf
https://godbolt.org/z/fcPT6jjhf
495デフォルトの名無しさん
2022/03/13(日) 21:37:39.20ID:e39Fa4ck gccは9でデフォルト(c++14)指定でも再現しない
496デフォルトの名無しさん
2022/03/13(日) 23:06:02.21ID:1ZaIS7m7 おまえもうハゲ始めてるのに何若者のフリしてんだよw
497デフォルトの名無しさん
2022/03/13(日) 23:19:39.35ID:bI6DiOQ5 なんやおっさんが書きこんだらあかんのか
おっさんがC++やったらあかんのか、ええおい!
おっさんがC++やったらあかんのか、ええおい!
498デフォルトの名無しさん
2022/03/13(日) 23:47:54.26ID:e39Fa4ck 今どきこんなスレ見てるのおっさんしかいねーよw
499デフォルトの名無しさん
2022/03/14(月) 00:10:40.47ID:ci4mynDi もう5ch自体がオッサンのすくつやしのう
500デフォルトの名無しさん
2022/03/14(月) 02:20:02.12ID:rjFiO5pI >>499
YouTubeで動画投降して、視聴者の年齢層を見てみたら、100人以上ユニークユーザー
数がいるのに、なぜか、45〜54歳が 100% になっていた。
日本にはこの年齢しか存在せず、後は幻影であることが明らかと成った。
YouTubeで動画投降して、視聴者の年齢層を見てみたら、100人以上ユニークユーザー
数がいるのに、なぜか、45〜54歳が 100% になっていた。
日本にはこの年齢しか存在せず、後は幻影であることが明らかと成った。
501デフォルトの名無しさん
2022/03/14(月) 02:28:09.93ID:U570WKgz URLを提示しないと何とも・・・内容次第では?
502デフォルトの名無しさん
2022/03/14(月) 09:03:41.97ID:HoF8kO8q503デフォルトの名無しさん
2022/03/14(月) 11:38:57.54ID:ndyVaXT0 昭和ってことは戦争体験したんですね
504デフォルトの名無しさん
2022/03/14(月) 12:26:33.29ID:GQP59fXj 生家のすぐ隣が根岸の米軍住宅だったのが俺の最も古い記憶だな
505デフォルトの名無しさん
2022/03/14(月) 12:27:46.01ID:alz+gcb+ カトラーも昨日で80歳なんやで
506デフォルトの名無しさん
2022/03/14(月) 12:28:28.21ID:7hHUAGdp507デフォルトの名無しさん
2022/03/14(月) 12:32:31.77ID:VKZDzId0 c++17までカバーしてる良書教えてちょ
508デフォルトの名無しさん
2022/03/14(月) 13:39:35.57ID:9629WIm4 俺の周りだと本物の老害は数が少なくて、脳が老害化してるアラサー前の若者が大多数だな
509デフォルトの名無しさん
2022/03/14(月) 14:53:18.27ID:2N61p2oq ニュース ・ トレンド
世界供給の約半分カバー
トレンドトピック: マック最終日、半導体不足
ツイッターのトレンドだけ見てたらAppleのマックのほうに見えるよな
世界供給の約半分カバー
トレンドトピック: マック最終日、半導体不足
ツイッターのトレンドだけ見てたらAppleのマックのほうに見えるよな
510デフォルトの名無しさん
2022/03/14(月) 16:35:39.58ID:GQP59fXj >>506
美濃屋の工場らへん
美濃屋の工場らへん
511デフォルトの名無しさん
2022/03/14(月) 18:24:00.75ID:7hHUAGdp >>510
もしかして本牧あたり?
もしかして本牧あたり?
512デフォルトの名無しさん
2022/03/14(月) 20:13:17.28ID:GQP59fXj513デフォルトの名無しさん
2022/03/15(火) 22:33:04.75ID:x6RxSJEa 追ってたらオッサンの会話にしか見えないやんけw
514デフォルトの名無しさん
2022/03/15(火) 23:43:47.86ID:IA+izEeV >>508
いや実際今の若人のほうが老害化(頭がカチカチ)になってるパターン多いよ
なんつかーSNSとかの弊害だろうな、方法論にはつねに正解があってそこからはずれるのは全部ダメ!
みたいな、自分で試さずに「誰某というカリスマが言うてるのが正しい」みたいな発想のやつが多い
いや実際今の若人のほうが老害化(頭がカチカチ)になってるパターン多いよ
なんつかーSNSとかの弊害だろうな、方法論にはつねに正解があってそこからはずれるのは全部ダメ!
みたいな、自分で試さずに「誰某というカリスマが言うてるのが正しい」みたいな発想のやつが多い
515デフォルトの名無しさん
2022/03/16(水) 00:07:07.20ID:kR1ttM2X 常にググって解法らしきものを見つけることを研鑽してきた弊害やろな。
誰かの踏襲しか出来ん、本人一人しかやってない、
どこにも参考資料なしとなったら思考停止か
もしくはあきらめちまう層。
誰かの踏襲しか出来ん、本人一人しかやってない、
どこにも参考資料なしとなったら思考停止か
もしくはあきらめちまう層。
516デフォルトの名無しさん
2022/03/16(水) 00:36:18.16ID:892EcJv9 分野の蓄積が多くなるとそうなのかもね
517デフォルトの名無しさん
2022/03/16(水) 01:22:56.72ID:dDBzFjnz ム板でC++の規格以外の話をすることは板違い
518デフォルトの名無しさん
2022/03/16(水) 08:57:09.69ID:eFhooB6a519デフォルトの名無しさん
2022/03/16(水) 09:28:03.54ID:9b9buJuo >>518
朝鮮人は板違い
朝鮮人は板違い
520デフォルトの名無しさん
2022/03/16(水) 09:47:16.21ID:sZ1wd+Ly 和製言語つーとRubyとか?
521デフォルトの名無しさん
2022/03/16(水) 10:01:22.67ID:qWEoTKGw >>519
ジャッッッッッップwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
ジャッッッッッップwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
522デフォルトの名無しさん
2022/03/16(水) 10:50:04.72ID:sZ1wd+Ly523デフォルトの名無しさん
2022/03/16(水) 11:00:56.73ID:UOk2lOR/524デフォルトの名無しさん
2022/03/16(水) 11:26:21.48ID:NlrnkDXA >>521
火病w
火病w
525デフォルトの名無しさん
2022/03/16(水) 11:33:19.05ID:FLjIdsXf さすがに極東板かマ板行け。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… [BFU★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 「稼ぐのよ!」高市総理が電話ガチャ切りで伝えたこと 鈴木憲和農林水産大臣が国政報告会に出席 自身が目指す農政の方針語る [煮卵★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 俳優 高岡蒼佑「エジプト出身とかナイジェリア出身とかの人が、日本の代表顔して移民の事とか話してるの見るとなんか違う気がする」★2 [Anonymous★]
- アベノミクス」で投資対象と化したマンション ローンの低金利が続き「年収の12倍」借りる20代まで😲 [861717324]
- 高市早苗総理につけたい二つ名 [245325974]
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
- 自民「高市の一言でこれまで積み上げてきた関係が駄目になる。言葉の重みを分かっていない。自分でまいた種は自分で刈り取ってもらう」 [256556981]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- 中国発日本行の航空券、491,000件(全体の32%)がキャンセルされたと判明。高市どうすんのこれ [603416639]
