0001デフォルトの名無しさん2021/10/23(土) 23:44:31.52ID:wRUe/Toi
C/C++は増築に次ぐ増築でとても複雑になり過ぎましたが
要らない仕様を使用禁止にすることで
もっとシンプルで使いやすくなるはず
皆さんそれぞれ色々考えがあると思いますが
これさえ無ければというものを描いて逝け
makeなんたら関数とかラムダ式がなかった頃のファンクタはもういらん
あとnewな
exceptionもnested_exceptionのクールさの前にすっかり霞んじまった
環境構築って、ccコマンドはおニューのシステムに始めからあるだろ
参加してるプロジェクトによってC++のバージョンが違って面倒くさい
0013デフォルトの名無しさん2021/11/01(月) 14:32:43.32ID:Pe/toaIP
Cの環境構築が荷が重いって・・
80年代から時が止まってんのかよ?
C++は例外周りがクソ過ぎ
C++11でマシにはなったが
まだまだ全然不十分
あれじゃCのsetjmpにボロ負けだ
デストラクタの virtual 付け忘れは設計ミスだよな
>>16
vtblのコストを強要するのはどうかと思うぞ cはそんなに建て増してないだろう、建て増されたc++からシステムプログラミングに本当に必要な物だけ取捨選択してる
atomicの保証されないc11以前のcはシステムプログラミング言語として欠陥品だった、あとはpodさえあればいい
c2xはなんか雲行きが怪しいが…
暗黙のコピーコンストラクタはやめて欲しい
定義されてなかったらエラーの方が嬉しい
0022デフォルトの名無しさん2021/11/22(月) 05:23:12.83ID:BgcNaRYw
>>21
[[notrivial]]かな、やるとしたら 0025デフォルトの名無しさん2021/11/25(木) 03:58:54.44ID:0166A/na
Cは良い
C++自体がいらない
Linusは20世紀の頃からC++は駄目だと言ってた
>>25
例の GoF が嫌い、というかなんでも GoF でドヤる人が嫌いなだけかと…
C で GoF をやる人は見たことがありません 他人を蹴散らし、頭脳オリンピックのチャンピオンを目指すような暴れん坊が、
自分にしかメンテできないコードをビルドに組み入れてドヤ顔するのに相応しい言語。
意図的に多重継承を数段重ねで使い、あの手この手で難読化も隙がない。
やがてプロジェクトのメンバーは、彼たった一人だけになった。独り勝ちして残ったのだ。
と、無能すぎて戦力外宣告され見る影もなく落ちこぼれた元PGが言う
決め台詞乙
やはり戦士にピッタリな言語っすね。戦国時代のままでいてソフトウェア後進国なだけある。
戦うことが目的じゃない俺にはもう魅力を感じない言語だ。戦う事が好きな奴同士で競い合ってくれ。
>>31
高級アセンブラにもなるCはそのままで、オブジェクト指向は他の良質な言語でいいって感じ。
登場時のC/C++はとにかく汚い仕様のプログラミング言語で、異種言語を一つ屋根の下で
同居させただけの、あれもこれも何でも許すマルチスタンダードな言語仕様だったな。
昔、現場でコーディング規約を強制すればPG辞めていくし、緩めれば呪文コードや数百行の関数を
当たり前の顔で書くし、日本語できないPG増えるし、テストしたら正常に動かねーしw など、
マネジメントの仕事を投げ出して逃げたかったんだぜ。メンタル強くなくなって後々逃げたけどw どっかで聞きかじっただけの綺麗事の
原理主義者はそいつ自身は空っぽで使い物にならないから
実を取る選択をしたら同調者が多かったのがC
それが気に入らねえやつは要するに排除対象なタイプってことだ
他の良質な言語って何だろう
まさかSmalltalkやJavaか?w
Object PascalやC#作ったあの人がC++の仕様決めをやってくれていれば・・・
Object Pascalか・・・
変数オブジェクトの宣言時、型表記を後に付ける点がフランス語文法の形容詞は名詞の後に付けるみたいで
UMLのクラス・オブジェクトの表記法とも相性良さそうだよな。
ただし、begin/endが野暮ったいとか面倒くさいと感じて毛嫌いする人も多いので、{ } 表記を取り入れれば良いのにな。
タイトルから書き始める語順が使いやすいことに
フランス語は関係ない
std::unordered_map<int, char> m;
の宣言ならm[1]のかたちでKey指定すればValueを取得できるのに
const std::unordered_map<int, char> m;
の宣言だとm[1]がコンパイルエラーになるのは設計の敗北感ある
特定の使い方だけを想定したみっともない関数だね
ヘルパー関数なら他にいくらでも作りようがあるのに
なんであんなゴミにしちまったのか理解に苦しむ
>>39
mapの[ ]演算子はキーに対応する値が存在しないときに追加する仕様なので、constの時にコンパイルエラーになるのは当然では? 参照しただけで値が代入される場合があるので当然
おとなしくfind使っとけ青二才
構造体はC言語と同じ仕様のままであって欲しかった
structにメソッド定義とか誰得なんだろう
ドラフト段階ではclassは存在しなくてstaticを拡張したものだったのかもしれない
そのうち継承やスコープの概念が取り込まれる際に分離されたが
互換性を保つため今に至ってるんじゃないかと
structと全く無関係な機能としてclassを作ってたら
C使いの食い付きが悪くて今の地位には昇れなかったろうな
C++以外のC系OOP言語がそうであるように
0046デフォルトの名無しさん2022/07/30(土) 16:24:14.46ID:paa5jUiA
inline float operator"" _\u03C0(unsigned long long times){ return 3.14159 * times; }
float r = 2_π;
こんなこと出来るんか
あと戻り値の型を色々変えてもいける観たいだが
同名で戻り値違いって定義できんの?
多重定義関数は仮引数の相違が必須
よって返却値のみの相違にはできない
register て何に使えるの?
使ったことないんだが?
アセンブラ屋がCを始めたとき
オンレジスタではなくオンメモリなことに
ちょっとしたストレスを感じたもので
デフォがautoなのが気になってregister指定しまくってた
バッファを指すポインタを貰って弄る時とか
register *rpで受けてゴニョゴニョし、最後に引数のp=rpで返すとか
最初と最後ですり替えるだけなのであんまり認知不可は高くないし、渡されたpを触らないのでデバッグもしやすい&意図も明瞭でわかりやすい使い方かと
オリジナルを触らずローカル(auto)で受けても良いけど、この作業変数無駄じゃんと受け取られる可能性がある、c書きにはそういう最適化好きな奴多いしおさら
特にパフォーマンスで利点がなくとも、registerが付いてるだけで(プロファイリングされない限り)他人に弄られにくくなるw
ローカルクラスが静的データメンバを持てないのはなぜなのか。
静的関数メンバ内に静的ローカル変数を定義して、それを戻すことはできるのに。
ローカルクラスはリンケージを持たないから
静的データメンバはリンケージが必要
これのこと?
int main()
{
struct local_class
{
static int data; //NG
};
}
診断メッセージに書いてあんじゃん
d:\learn>g++ 54.cpp -std=c++2b
54.cpp: In function 'int main()':
54.cpp:5:25: error: local class 'struct main()::local_class' shall not have static data member 'int main()::local_class::data' [-fpermissive]
5 | static int data;
| ^~~~
スコープに丸括弧なんか使えないんだから当たり前
スコープとリンケージは少し違う概念
c++ の仕様書のno linkage を調べると
no linkage
The name can be referred to only from the scope it is in.
Any of the following names declared at block scope have no linkage:
variables that aren't explicitly declared extern (regardless of the static modifier);
local classes and their member functions; ←ーーこれ
other names declared at block scope such as typedefs, enumerations, and enumerators.
Names not specified with external, module, (since C++20) or internal linkage also have no linkage, regardless of which scope they are declared in.