C++相談室 part144

■ このスレッドは過去ログ倉庫に格納されています
2019/07/22(月) 13:18:35.52ID:gptRHpgT
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part143
https://mevius.5ch.net/test/read.cgi/tech/1560574313/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
2019/08/01(木) 23:14:16.19ID:Phw6FYmd
>>177
うわああああああ!!!これだ!これだやりたかったの!サンクス!
そうか0を対象の構造体へcastした後メンバアクセスしてそのアドレス値を取るのか!全然思い付かんかった!
俺に向けたレスかは分からんけど助かった!サンクス!

>>181
それ思い付いたんだけど苦行過ぎてやめてもうた…

>>182
あーalignofで上手く取るってのも有ったのか!使う機会があまり無いポンコツなもので気付かんかった!

>>183
うむむ?初耳機能だ
後で調べてみまする

皆さんありがとうございました!
2019/08/02(金) 01:30:02.97ID:Baufd8HM
メンバポインタの差取る方法もありそう
規格の保証はなさそうだけど
2019/08/02(金) 02:03:55.33ID:zOtmkI/7
>>151
using を絶対に全く使わないのであれば、そもそも namespace の概念自体が
意味が無いと思いますよ。タイプ量を減らすことはとても大切だからこそ、
衝突しない場合には、using を使えるように設計してされているわけですから。
もし絶対に std:: を付けるのであれば、例えば、std::vector と書かずに
最初から StdVector などと固定の名前でも良かったわけです。しかし
それだと長くなってコーディング効率が下がるので、可能ならば
std:: を省略して vector と書けるように設計されているわけです。
それこそが namespace の思想なのでしょう。
2019/08/02(金) 02:09:48.23ID:zOtmkI/7
>>173
usingを使わない方針は気持ちは分かります。しかし、usingを使い辛くなって
しまうのは想像力を働かせればSTLやC++の言語使用設計の段階から
最初から分かっていたはずで、そもそもSTLが最初からstd という
namespace に入れて有ること自体が余りセンスが無かった可能性があると
自分は思ってます。
2019/08/02(金) 02:16:04.07ID:zOtmkI/7
1. std::string
2. StdString
3. CString

最も効率がいいのは、3 の CString でその意味では CString の設計者は
センスが良かったと私は思っています。using を使って std:: を書かないように
した場合、確かに何かのライブラリと衝突の危険性が出てきます。
ならば、標準のライブラリ(STL)は、デフォルトでは namespace の中に入れる
べきではなかったのではないかとも思います。
namespaceは、たまたま衝突が起きた場合には、その時点で使うと助かる場合が
あると思いますが、最初から入れてしまった事で新たな問題が入ってしまった
可能性があります。
2019/08/02(金) 02:35:42.08ID:TGlmBsBg
>>186
namespaceってその名の通り名前空間を分割することで識別子名の競合を避けて、命名の自由度を上げる(楽をする)ための機能でしょ。
ある程度大きな規模のプロジェクトでは大変重宝するものだと思うんだけど、なんかものすごく偏った理解のしかたしてない?
2019/08/02(金) 02:46:27.31ID:TGlmBsBg
>>188
CStringとタイプするには、shiftを押したり離したりしないといけないし、手間としてはstd::とそれほどかわらないと思うんだけどw
2019/08/02(金) 02:49:52.24ID:zOtmkI/7
>>190
Shiftキーは同時押し可能なので速度が全然違う。
CStringの場合、実質Cの1文字が増える程度で済むが、
std::stringは確実に5文字分増える。
2019/08/02(金) 02:51:05.19ID:zOtmkI/7
>>189
環境の変化での不安定さを避けるためにstd::を付けざるを得ないなら
命名の自由度は全く上がってません。
2019/08/02(金) 02:54:02.02ID:TGlmBsBg
>>191
いやいや、実際はshiftを若干早くおしとかないと、cStringになっちゃったりするだろw
離す時も気をつけないとCSTringになっちゃったりするし。
それに最近のエディタ(統合開発環境)には補完機能が付いてるから、std::で候補が絞られる分、選択に有利に働く。
2019/08/02(金) 02:54:16.42ID:1bW2v8eW
>>186
外から使うことだけしか考えてないみたいだけど、名前空間内の実装を読み書きしやすくする効果もあるでしょ。
2019/08/02(金) 02:55:50.33ID:TGlmBsBg
>>192
命名の自由度があがるのはnamespaceの中での話だよ。
namespaceで囲っておけば、変数にhogeとか適当な名前をつけても競合する心配がなくなる。
2019/08/02(金) 03:01:42.94ID:zOtmkI/7
>>195
namespace std で囲まれている事で気が緩んで hoge みたいな短い名前付けて
しまうことで、std:: を外すことが不可能になってしまう恐れが有る。
結局なんのための名前空間なのか分からなくなってしまうという。
外せない名前空間なら、std_ でも Std でも Stl を付けた方がタイプ量が
少なく済んだのに。
2019/08/02(金) 03:04:55.47ID:TGlmBsBg
>>196
あくまで外すことが前提なのかw
2019/08/02(金) 03:07:18.69ID:zOtmkI/7
>>195
大丈夫だと思って i という一文字のグローバル変数を定義したとしよう。
すると、std::i としている場合には問題ないが、using namespace std;
とした場合、大変な現象が起きる。伝統的な for のループ変数と衝突
するから。
2019/08/02(金) 03:07:57.71ID:zOtmkI/7
>>197
絶対に外さないなら namespace に何のメリットが有るの。
2019/08/02(金) 03:08:43.92ID:zOtmkI/7
>>197
外さないなら、StdVector, StdList で良かったはず。
2019/08/02(金) 03:10:27.53ID:tRQdKQsJ
別に外さなくとも、その名前空間内で書くときは省略できるんで楽なんだけどな
(ライブラリ書いてるときとか
2019/08/02(金) 03:10:40.06ID:zOtmkI/7
>>193
それに、コロン(:)はキーが打ちにくい場所にある上に、同じキーを
二回連打しなくてはならない。これが時間がかかる。
2019/08/02(金) 03:11:25.60ID:zOtmkI/7
>>201
作る側の意見???
普通、ライブラリは使い勝手が良いことの方が重要ですよね。
2019/08/02(金) 03:14:20.48ID:Baufd8HM
この世の名前空間はstdしかないと思ってるのかな?
mylib::vectorとかyourlib::vectorとかを安心して作れるようにするための機能が名前空間だぞ
2019/08/02(金) 03:15:42.09ID:zOtmkI/7
>>201
もしかしてアプリなどでは使わないのにライブラリを作ることだけで
満足している人たちが多いのでしょうか。

なるほど、それで stl や boost が究極にセンスの悪い代物になっているのかも
知れない。コンテナ類は、C/C++のリストの概念が全く理解できて無い人
が作ったとしか思えない。リストは構造がリストであればリスト足りえると
思っているのが頭が悪い。ポインタでアクセスできないリストはリストじゃない。
O(1)で済むところがO(N)になってしまっていて、stlは全くセンスの
悪い欠陥ライブラリ。
2019/08/02(金) 03:17:07.37ID:zOtmkI/7
>>204
だったら MylibVector で十分。そのほうが短い。
接頭辞を変えたければ、grep置換すればいいだけ。wz grepで一発。
それともstlの設計者はgrep置換使ったことが無いんだろうか。
とても頭が悪い感じがする。
2019/08/02(金) 03:37:49.81ID:Baufd8HM
最初にusing mylib::vector;って書いとけば以後は単にvectorと書いたらmylib::vectorの意味になるんだよ
vectorを100回使うならその方が短いだろ?
後でyourlibやmylib_ver2のvectorを使いたくなればgrep(笑)なんかしなくても最初のusing宣言を一箇所書き換えるだけでいい
名前空間ってのはそういう機能で、ただの接頭辞じゃねえんだよわかったか知恵遅れ
2019/08/02(金) 03:53:52.52ID:tRQdKQsJ
>>205
使うから書いてる、というか今後何度もソフト作るのに必要だから書いてるんだが
まぁあんたの言うような変な奴も居るだろうけどな

なんか大事な基本すっとばし過ぎで相手する気力も失せた
2019/08/02(金) 04:05:35.16ID:HNnVO++M
>>186
タイプ量を減らすなんてのは開発において些末なことだろ。通常は開発時間の多くは設計、思考に費やして、コードをタイプする時間の比率なんて誤差程度のものだよ。
お前さんのプログラミングではほんの数文字のタイプがそれほど重みがあるのか?もしかして頭使わずに写経だけしてるのか?
2019/08/02(金) 04:13:12.69ID:HNnVO++M
>>200
どうして外すか外さないかの二択しかないのか?
外すことでメリットがある使い方をするときは外せばいいよ。
外すための方法がいくつかあるのは分かるか?その書き方の違いや、それを使う場面や文脈で良し悪しが変わるというのは理解できるか?

お前さんは名前空間に関する仕様の理解と現実の開発作業の経験が少ないのにその自覚がなく、自分の考えに凝り固まってるから議論が進まない。
2019/08/02(金) 04:26:28.62ID:HNnVO++M
>>206
自分のコードを再利用しやすくするためにライブラリ化する。その歳に名前の衝突を容易に回避できるよう名前空間を使用する。
名前がぶつかるからって安易にコピペして置換するなんて愚の骨頂だろう。
そんなやり方を良しとするというのは、規模が小さく保守の必要もない使い捨てのような小さなプログラムしか作ったことがないのだろうか。
2019/08/02(金) 05:07:02.54ID:qy++cDJt
なんかやべーやついる
2019/08/02(金) 06:16:59.13ID:DB/RmtTt
長文なのに書いてある事はスカスカだな
腐ってもプログラマーの端くれなら言いたい事は短く簡潔に書いてくれ
2019/08/02(金) 06:29:04.32ID:QcV1urKo
夏休み恒例爆釣り天国(゚∀゚)
2019/08/02(金) 06:49:45.16ID:CuK6m4Hq
どこのスレも荒れてると思ったら夏休みだった
2019/08/02(金) 07:04:11.63ID:OZv2fXQJ
名前空間やクラスに別名付けれるの忘れてね?
2019/08/02(金) 07:27:30.51ID:uj4cDNt2
だいたい標準ライブラリがvectorとあstringみたいなきわめて衝突しやすい名前を使っているのが悪い
諸悪の根源すぎて死ぬ
std_vectorとかstd_stringとか衝突しにくい名前にすれば済んだ話
しかしそれだと標準ライブラリ内部のコードがダサくなって逝けてないから、という理由で導入されたのがstd名前空間。
所詮センスの問題なためにいつまでたっても議論が収束しない

ここはRustのパッケージのようにパッケージが公開/非公開の唯一の境界、みたいに割り切って
名前空間の設定に論理的必然を持たせたらよかったんじゃ…
2019/08/02(金) 07:35:54.09ID:uj4cDNt2
だいたいfoo::some_symbolと書いたときfooがクラスのときご名前空間のときがあって、
それぞれやれることが微妙に違いもあるがだいたいオーバーラップしているとか嫌すぐる…
疑問に思わないのはC++に脳が汚染されている証拠

後方互換性命で変えるな派と後方互換性を失っても改良すべき派の合意が見られない事案については
前者が勝って後者は追加で我慢するというWIN-win決着で永遠に先送りされつつ混迷だけが深まっていくのがC++の宿命
2019/08/02(金) 07:38:50.92ID:Mf8CxiUW
namespaceも分からない初心者が上級者面して住み着いてるのか・・・
2019/08/02(金) 07:42:20.24ID:uj4cDNt2
なにおうnamespaceがイミフな言語機能であることぐらいはよくわかっとるわ!
標準ライブラリ内部のコードにおいてもほとんどがテンプレートであるために、
using std;することが許されない

つまり、std_vectorやstd_stringという風に名前を長くするのに対してなんのメリットも提供されていない
2019/08/02(金) 07:43:02.09ID:uj4cDNt2
訂正orz;
誤: using std;
正: using namespace std;
2019/08/02(金) 08:15:18.88ID:WBAmTSV/
関数名_ローカル名 ってすれば全部グローバル変数でいいだろっていう主張?
2019/08/02(金) 09:01:08.99ID:r+xcYYgK
数多くの言語で採用されているnamespaceが意味不明って・・・
2019/08/02(金) 09:13:54.00ID:9zV6XrP/
なんでこういう馬鹿が定期的に沸くんだ
ちょっと調べればなぜこんな機能が必要とされたか位わかるだろ
名前空間の問題なんてC++固有の問題じゃないのに
2019/08/02(金) 11:01:28.88ID:OZv2fXQJ
>>220
邪悪なADLが利点だよ
2019/08/02(金) 14:45:11.22ID:Tt8ZbjXp
complex<__float128>ってできないの?
2019/08/02(金) 16:35:01.23ID:aGnTdwVX
インスタンス生成時に絶対に決めなきゃいけない定数をテンプレートパラメータにするかコンストラクタに渡すか迷ってる

両者にはどういう思想の違いがありますか?
2019/08/02(金) 16:54:49.60ID:Bzyz7IRB
なんかLinus TorvaldsがC++ディスってる記事でnamespace絡みで
「Cならmy_foo()って名前にするね、やっほー、grep my_fooが機能するぜ!」
みたいな話があったような気がするんだけど検索しても見つからない(´・ω・`)
2019/08/02(金) 16:56:52.52ID:T+FnjWGP
テンプレートはコンパイル時に決まる値しか渡せない
2019/08/02(金) 17:08:25.07ID:aGnTdwVX
>>229
なるほど
2019/08/02(金) 18:19:12.53ID:zOtmkI/7
>>218
aaa::bbb::ccc::ddd みたいな名前が大量に必要になったりして、
STLの設計者は設計が下手だと思う。
2019/08/02(金) 18:33:35.61ID:6Fm4tKt9
>>231
あーなるほどusingも知らない初心者ですか。
ここはまだ早いの初心者スレへどうぞ
2019/08/02(金) 18:46:25.31ID:v+e6jaBZ
おい!
4倍精度複素数は!?
ないの!!???
2019/08/02(金) 18:49:34.26ID:qy++cDJt
boost::multiprecision 使え
2019/08/02(金) 18:51:13.74ID:OZv2fXQJ
今std::chronoとかstd::filesystemとか標準の名前空間も細分化するようにしてきてるからusing namespace std;の影響もそこまで酷くならないかもしれない
2019/08/02(金) 18:52:43.15ID:4a7qvAUu
stdの中に全部ぶちこんであるのが問題

std::header名の名前空間に入れて、std内でusing namespace header名していればいいのに

std::xxxでも使えるし、using namespace std::header名すればそのheaderの中身だけが省略して使える
2019/08/02(金) 18:56:02.63ID:zOtmkI/7
>>232
なんでも初期状態で使いやすいことが重要。
使いやすくするには各自でやれというのは設計が下手な証拠。
2019/08/02(金) 18:59:20.11ID:zOtmkI/7
匿名性掲示板が困るのは、何かの欠点を指摘するとそれを作った当事者らしき人が
全否定をしてしまうことで話が深まらないこと。
同意する人がいればもっと良いライブラリを探す話とかに発展できる
かも知れないのに。
2019/08/02(金) 19:00:52.12ID:4a7qvAUu
ABI互換が問題ならextern "C"みたいに
extern ::std
みたいなので、マングリング時の名前空間を強制できる機能つければなんとかならんかね
2019/08/02(金) 19:05:43.92ID:TY1gde0p
>>237
お前の「使いやすい」と世間一般の「使いやすい」が一致してないというだけだろう。
お前の「こうあるべき」と世間一般の「こうあるべき」のズレが大きいから、今のC++はお前にとって不満の大きいものになっているんだろう。もしかすると家庭や学校、社会全体も。
2019/08/02(金) 19:09:51.86ID:zOtmkI/7
>>240
そういう話がやっぱり、「ポジショントーク」だと思うんだよ。
そこまでして人の意見を全否定するには何らかの背景事情があると
しか思えない。
2019/08/02(金) 19:10:14.38ID:TY1gde0p
>>238
C++の仕様策定に関与したような人がこんなスレを覗いて低レベルな指摘にわざわざ反応するわけないだろう。想像力が豊かだな。
2019/08/02(金) 19:12:46.85ID:yAHSp118
否定的意見はマウンティングとか強すぎるな
2019/08/02(金) 19:12:52.67ID:zOtmkI/7
>>242
でも、オイラはそのくらいできるくらい優秀だよ。
2019/08/02(金) 19:15:19.48ID:zOtmkI/7
暗に陽にアメリカを褒めちぎって日本をけなすような人が5chには多い。
それで日本はめちゃくちゃに成ったんじゃなかろうか。
例えば「日本製スマホが全然駄目」などという説が5chでは大量に流布
されている。実際、そういう情報を信じて損する人は多かろう。
大問題だ。
2019/08/02(金) 19:49:20.44ID:azkiHyJD
>>237
だからお前みたいなやつのために
名前空間省略する仕組みあるでしょ?
何が不満なのさ
2019/08/02(金) 21:08:13.86ID:9zV6XrP/
VSスレで暴れてたジジイと芸風が同じだな
2019/08/02(金) 23:12:48.91ID:zqhkSChf
誰も書かなかったので仕方無いので漏れが書くが、namespaceの唯一の便利な使い方は(「唯一の」だ
、すでに衝突したあるいは衝突不可避なソースコードAとソースコードAを
namespace a { A }
namespace b { B }
と囲う等して分離できる ( こともある ) というだけやんけ
それとて完全には果たせないというあたりがいかにも行き当たりばったりで中途半端な言語要素感を醸し出してゐる
(中で::fooで呼んでたり入れ子のnamespaceを外から呼んでたりのケースは救われない
2019/08/02(金) 23:17:29.32ID:4a7qvAUu
てかnamespaceは色々中途半端な点はあるが、便利に使える機能だろ
無いと物凄く不便
using namespace stdは使わんな
2019/08/02(金) 23:19:05.25ID:jyJeqz7W
名前空間ネストして書くのが超めんどくさかったがようやく改善するとか
251デフォルトの名無しさん
垢版 |
2019/08/02(金) 23:37:02.96ID:DB/RmtTt
関数呼び出し時に宣言が必要か否かってCとC++では異なってたりしますか?
規格書読めないマンで申し訳ないのですがgccだとC/C++でそれぞれOK/NGと結果が異なります
2019/08/03(土) 00:35:18.25ID:T50aUZPM
翻訳単位超えるお話?
2019/08/03(土) 02:27:32.85ID:m/VIbHu2
>>222は、FSMとPDAの区別もつかない
くるくる

((ヽ三/)   (ヽ三/))
  (((」) ___ (L)))
 / // ノヽ\\ \
( </ (● ●)\> )
 \| ⌒(_人_)⌒|/
   \   ̄  /

パーだおwwwwww

  n「「「|   「「「h
  |ー ⊃  ⊂ ー|
  >ーノ___ヽー<
 / // ノヽ\\ \
( < o゚(● ●)゚o> )
 \| ⌒(_人_)⌒|/
   \  |┬| /
     ヽノ
2019/08/03(土) 07:47:52.71ID:NzOgSHrF
お前らが名前空間で議論したところで何のメリットもデメリットもない事に気づけ、そしてRustを使え
ゴミ言語
2019/08/03(土) 08:16:58.65ID:ulHqgYUF
C++じゃないと出来ない事があるのでRustは使えん。
2019/08/03(土) 08:30:10.28ID:NzOgSHrF
>>255
(そのロジックを)Rustで書くことが出来ないと表現した方が正しそう
257デフォルトの名無しさん
垢版 |
2019/08/03(土) 10:47:51.13ID:m/VIbHu2
Ristがチューリング完全かどうかについては誰もが口を濁すが
それはそうとして、これからはRustでプロトタイピングしてC++のコードを上司には提出するという
スタイルに移行するのではないかと思う
2019/08/03(土) 11:01:51.61ID:L8lVlVkx
Ristは流したけど上司に提出でふいた
2019/08/03(土) 12:46:23.14ID:nO8f/Gbv
>>234
2成分の vector<__float128> を使うことにしました
260デフォルトの名無しさん
垢版 |
2019/08/03(土) 12:51:32.63ID:oHrDPFKS
名前空間つかうようりは、意味変数を使った方がよい
2019/08/03(土) 13:07:00.48ID:eeu00PkY
>>257
それはない。
2019/08/03(土) 13:47:24.37ID:ulHqgYUF
>>260
意味変数って何?造語?
263sage
垢版 |
2019/08/03(土) 15:26:08.69ID:dTS2sKLx
>>261
unsafeを使わない場合の話
2019/08/03(土) 15:39:33.35ID:bjverAuH
>>166
名前のバッティングが防げてコーディングの手間が減る
いいことばかりじゃん
2019/08/03(土) 15:51:00.92ID:bjverAuH
namespaceそんなに不便かのう。
他の言語もやたらとパス掘って面倒なことになってるが。
pythonでも
import matplotlib.pyplot as plt
みたなのあるしな。
C++でやるなら
namespace plt = matplotlib::pyplot
とできるわけで、他の言語とにたりよったり
2019/08/03(土) 16:06:05.71ID:dTS2sKLx
>>264
using namespaceによって名前のバッティングのリスクはむしろ増す
なぜなら、namespaceの中身を記述する中の人がnamespaceで守られているつもりで短い名前を使いまくることがあるからじゃ
つまりnamespaceの中の人の思惑に反してusing namespaceしたとき、
namespaceは本来の言語要素としての目的とは真逆の危険なブツ(衝突の加速器)に早変わりする。

ファイルスコープでusing namespaceして書いたコードは他にもっていったとき地獄が始まる

ていうか同じものに複数の表記を許すのはそもそも美しくない

以上の理由によりusing namespaceは(特にファイルスコープでは)使ってはならない
C++から削除したほうが良い
2019/08/03(土) 16:11:48.01ID:ve9YLJaL
cout 自体使わないけど、昔のCだったら、#include <stdio.h>さえしとけば、
printf()もputs()もputhcar()もgetc()もfputc()もfprintf()もsprintf()も
vsprintf()もvprintf()もfopen()もfread(), fwrite(), fgetc() もみんな
そのまま短い関数名で使えたのに、今のC++だと、もし、
using namespace std; を使ってはならないなら、

using std::cout;

みたいな事を使う名前の文だけやらなくちゃいけないのはかなり非効率だと思う。
2019/08/03(土) 16:15:24.12ID:eeu00PkY
>>267
誤:みたいな事を使う名前の文だけやらなくちゃいけないのはかなり非効率だと思う。
正:みたいな事を使う名前の分だけやらなくちゃいけないのはかなり非効率だと思う。
2019/08/03(土) 16:21:38.24ID:dTS2sKLx
>>265
namespace(やパッケージ名やモジュール名)のエイリアスえは安全性とタイピング量の効率の良い妥協点だとは思う
ただし、ファイルスコープでエイリアスしたコードを他に持っていったとき(ry

ちなRustではモジュール名の別名の付け替えはできないが、using namespaceみたいなことを
してほしいのかしてほしくないのかを中の人がモジュール名の末尾の階層を「prelude」にするという慣例で凌いでゐる
2019/08/03(土) 16:23:34.90ID:bjverAuH
>>266
あの、.hでは使わず.cppで使う話についてなんだが
2019/08/03(土) 16:24:37.04ID:bjverAuH
>>269
だからなんでヘッダでそういうエイリアスやらを使う前提で話してんだ、おまえはバカか
2019/08/03(土) 16:26:49.27ID:bjverAuH
.cppの方は読み込むヘッダがそこに書き込まれてるんだからusingしようがaliasしようが問題ないだろと。
どこで読み込まれるかわからないヘッダに使うことと分けて考えられへんのかね、このバカは
2019/08/03(土) 16:26:57.92ID:dTS2sKLx
>>270>>271
.hでは使わず.cppで使う話してるんだけど…
ひょっとしてファイルスコープでusing namespaceするというのを.hで使う意味だと
この暑さで短絡しているのでは…
2019/08/03(土) 16:27:31.31ID:ve9YLJaL
大部分のここの人達の主張は、直接

std::vector, std::list, ・・・ を書くか、それが嫌なら、

using std::vector;
using std::list;
・・・

を延々と書けというんですよね。後者のやり方は、Java の import 文で
import com.sun.xxx.xxx.class1;
import com.sun.xxx.xxx.class2;
・・・

などとするのに似ていますが、それが一番の Java の欠点でも有る部分なんです。
そこを C++ は取り入れてしまった。
2019/08/03(土) 16:32:21.74ID:dTS2sKLx
>>274
Javaのimport文も一応「*」でusing namespaceと同じようなことができるはず…
問題なのは、中の人の意図がusing namespaceしてほしくないケース(namespace内で短い名前を使いまくっている(>>266))
においてもusing namespaceできてしまうことにある
2019/08/03(土) 16:35:39.76ID:s7JzQoXH
stdつけるのそんなに嫌かね?
1つなら良いじゃないかと思う
長い奴は別名つけりゃいいし
IDE使っているとnamespace付きの方が候補が絞れてむしろ便利じゃね
ADLでつけなくても呼べる場面であったとしても
2019/08/03(土) 16:46:08.58ID:eeu00PkY
>>276
IDEのエディタは使ってないので補完機能は使わない。
2019/08/03(土) 16:52:55.00ID:M1zmWsZu
IDE使え
2019/08/03(土) 16:58:03.17ID:bjverAuH
>>276
なんでstdに限定するのかな
2019/08/03(土) 16:59:59.07ID:bjverAuH
>>275
なにが困るんだっての。
名前が被ったらスコープ内での命名が優先されるが、読み込んだヘッダの中の名前に影響は及ぼさないだろ
そして、隠蔽された名前にはnamespace名を使えばアクセスできるんだから何ら問題はない
2019/08/03(土) 17:00:41.48ID:s7JzQoXH
>>279
stdじゃなくてもalias作れば良いだろ

class scopeでnamespace alias作れないのは結構面倒だが
2019/08/03(土) 17:08:23.80ID:dTS2sKLx
>>280の言っている「問題にならないケース」はusing namespaceしなければ
そもそも名前が被ったりしないことから尻拭いの手間が生じないケースなので
using namespace擁護としては意味がない

既存の型と短い名前の組み合わせでも名前が衝突しないようにnamespaceという仕組みを設けたというのに
その崇高な理念を忘却しし、衝突させておいてから尻拭い可能だからおk、というおよそ合理精神0のが>>280の主張
2019/08/03(土) 17:14:33.69ID:eeu00PkY
>>280
その話とは関係ないかもしれないけど、以下のようなことがあった。

その時には、理由は追求しなかったんだけど、昔、Javaで
impot com.sun.xxx.xxx.*;
impot com.sun.yyy.yyy;
・・・

みたいなことをやった時、* を付けたことによって javacでコンパイル時に名前衝突が起きた
ことがあった。それで * を使うのをやめて個別に直したら衝突しなくなった。

最後の方の名前は同じで、それを限定している名前、例えば、
zzz.aaa.ccc;
zzz.bbb.ccc;
みたいなのがあって、ccc の部分が同じだから ccc だけでアクセスできるようにした場合に
衝突が起きたのかもしれない。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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