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/ (日本語)
----- テンプレ ここまで -----
C++相談室 part144
■ このスレッドは過去ログ倉庫に格納されています
2019/07/22(月) 13:18:35.52ID:gptRHpgT
255デフォルトの名無しさん
2019/08/03(土) 08:16:58.65ID:ulHqgYUF C++じゃないと出来ない事があるのでRustは使えん。
256デフォルトの名無しさん
2019/08/03(土) 08:30:10.28ID:NzOgSHrF >>255
(そのロジックを)Rustで書くことが出来ないと表現した方が正しそう
(そのロジックを)Rustで書くことが出来ないと表現した方が正しそう
257デフォルトの名無しさん
2019/08/03(土) 10:47:51.13ID:m/VIbHu2 Ristがチューリング完全かどうかについては誰もが口を濁すが
それはそうとして、これからはRustでプロトタイピングしてC++のコードを上司には提出するという
スタイルに移行するのではないかと思う
それはそうとして、これからはRustでプロトタイピングしてC++のコードを上司には提出するという
スタイルに移行するのではないかと思う
258デフォルトの名無しさん
2019/08/03(土) 11:01:51.61ID:L8lVlVkx Ristは流したけど上司に提出でふいた
259デフォルトの名無しさん
2019/08/03(土) 12:46:23.14ID:nO8f/Gbv >>234
2成分の vector<__float128> を使うことにしました
2成分の vector<__float128> を使うことにしました
260デフォルトの名無しさん
2019/08/03(土) 12:51:32.63ID:oHrDPFKS 名前空間つかうようりは、意味変数を使った方がよい
261デフォルトの名無しさん
2019/08/03(土) 13:07:00.48ID:eeu00PkY >>257
それはない。
それはない。
262デフォルトの名無しさん
2019/08/03(土) 13:47:24.37ID:ulHqgYUF >>260
意味変数って何?造語?
意味変数って何?造語?
263sage
2019/08/03(土) 15:26:08.69ID:dTS2sKLx >>261
unsafeを使わない場合の話
unsafeを使わない場合の話
264デフォルトの名無しさん
2019/08/03(土) 15:39:33.35ID:bjverAuH265デフォルトの名無しさん
2019/08/03(土) 15:51:00.92ID:bjverAuH namespaceそんなに不便かのう。
他の言語もやたらとパス掘って面倒なことになってるが。
pythonでも
import matplotlib.pyplot as plt
みたなのあるしな。
C++でやるなら
namespace plt = matplotlib::pyplot
とできるわけで、他の言語とにたりよったり
他の言語もやたらとパス掘って面倒なことになってるが。
pythonでも
import matplotlib.pyplot as plt
みたなのあるしな。
C++でやるなら
namespace plt = matplotlib::pyplot
とできるわけで、他の言語とにたりよったり
266デフォルトの名無しさん
2019/08/03(土) 16:06:05.71ID:dTS2sKLx >>264
using namespaceによって名前のバッティングのリスクはむしろ増す
なぜなら、namespaceの中身を記述する中の人がnamespaceで守られているつもりで短い名前を使いまくることがあるからじゃ
つまりnamespaceの中の人の思惑に反してusing namespaceしたとき、
namespaceは本来の言語要素としての目的とは真逆の危険なブツ(衝突の加速器)に早変わりする。
ファイルスコープでusing namespaceして書いたコードは他にもっていったとき地獄が始まる
ていうか同じものに複数の表記を許すのはそもそも美しくない
以上の理由によりusing namespaceは(特にファイルスコープでは)使ってはならない
C++から削除したほうが良い
using namespaceによって名前のバッティングのリスクはむしろ増す
なぜなら、namespaceの中身を記述する中の人がnamespaceで守られているつもりで短い名前を使いまくることがあるからじゃ
つまりnamespaceの中の人の思惑に反してusing namespaceしたとき、
namespaceは本来の言語要素としての目的とは真逆の危険なブツ(衝突の加速器)に早変わりする。
ファイルスコープでusing namespaceして書いたコードは他にもっていったとき地獄が始まる
ていうか同じものに複数の表記を許すのはそもそも美しくない
以上の理由によりusing namespaceは(特にファイルスコープでは)使ってはならない
C++から削除したほうが良い
267デフォルトの名無しさん
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;
みたいな事を使う名前の文だけやらなくちゃいけないのはかなり非効率だと思う。
printf()もputs()もputhcar()もgetc()もfputc()もfprintf()もsprintf()も
vsprintf()もvprintf()もfopen()もfread(), fwrite(), fgetc() もみんな
そのまま短い関数名で使えたのに、今のC++だと、もし、
using namespace std; を使ってはならないなら、
using std::cout;
みたいな事を使う名前の文だけやらなくちゃいけないのはかなり非効率だと思う。
268デフォルトの名無しさん
2019/08/03(土) 16:15:24.12ID:eeu00PkY269デフォルトの名無しさん
2019/08/03(土) 16:21:38.24ID:dTS2sKLx >>265
namespace(やパッケージ名やモジュール名)のエイリアスえは安全性とタイピング量の効率の良い妥協点だとは思う
ただし、ファイルスコープでエイリアスしたコードを他に持っていったとき(ry
ちなRustではモジュール名の別名の付け替えはできないが、using namespaceみたいなことを
してほしいのかしてほしくないのかを中の人がモジュール名の末尾の階層を「prelude」にするという慣例で凌いでゐる
namespace(やパッケージ名やモジュール名)のエイリアスえは安全性とタイピング量の効率の良い妥協点だとは思う
ただし、ファイルスコープでエイリアスしたコードを他に持っていったとき(ry
ちなRustではモジュール名の別名の付け替えはできないが、using namespaceみたいなことを
してほしいのかしてほしくないのかを中の人がモジュール名の末尾の階層を「prelude」にするという慣例で凌いでゐる
270デフォルトの名無しさん
2019/08/03(土) 16:23:34.90ID:bjverAuH >>266
あの、.hでは使わず.cppで使う話についてなんだが
あの、.hでは使わず.cppで使う話についてなんだが
271デフォルトの名無しさん
2019/08/03(土) 16:24:37.04ID:bjverAuH >>269
だからなんでヘッダでそういうエイリアスやらを使う前提で話してんだ、おまえはバカか
だからなんでヘッダでそういうエイリアスやらを使う前提で話してんだ、おまえはバカか
272デフォルトの名無しさん
2019/08/03(土) 16:26:49.27ID:bjverAuH .cppの方は読み込むヘッダがそこに書き込まれてるんだからusingしようがaliasしようが問題ないだろと。
どこで読み込まれるかわからないヘッダに使うことと分けて考えられへんのかね、このバカは
どこで読み込まれるかわからないヘッダに使うことと分けて考えられへんのかね、このバカは
273デフォルトの名無しさん
2019/08/03(土) 16:26:57.92ID:dTS2sKLx274デフォルトの名無しさん
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++ は取り入れてしまった。
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++ は取り入れてしまった。
275デフォルトの名無しさん
2019/08/03(土) 16:32:21.74ID:dTS2sKLx276デフォルトの名無しさん
2019/08/03(土) 16:35:39.76ID:s7JzQoXH stdつけるのそんなに嫌かね?
1つなら良いじゃないかと思う
長い奴は別名つけりゃいいし
IDE使っているとnamespace付きの方が候補が絞れてむしろ便利じゃね
ADLでつけなくても呼べる場面であったとしても
1つなら良いじゃないかと思う
長い奴は別名つけりゃいいし
IDE使っているとnamespace付きの方が候補が絞れてむしろ便利じゃね
ADLでつけなくても呼べる場面であったとしても
277デフォルトの名無しさん
2019/08/03(土) 16:46:08.58ID:eeu00PkY >>276
IDEのエディタは使ってないので補完機能は使わない。
IDEのエディタは使ってないので補完機能は使わない。
278デフォルトの名無しさん
2019/08/03(土) 16:52:55.00ID:M1zmWsZu IDE使え
279デフォルトの名無しさん
2019/08/03(土) 16:58:03.17ID:bjverAuH >>276
なんでstdに限定するのかな
なんでstdに限定するのかな
280デフォルトの名無しさん
2019/08/03(土) 16:59:59.07ID:bjverAuH >>275
なにが困るんだっての。
名前が被ったらスコープ内での命名が優先されるが、読み込んだヘッダの中の名前に影響は及ぼさないだろ
そして、隠蔽された名前にはnamespace名を使えばアクセスできるんだから何ら問題はない
なにが困るんだっての。
名前が被ったらスコープ内での命名が優先されるが、読み込んだヘッダの中の名前に影響は及ぼさないだろ
そして、隠蔽された名前にはnamespace名を使えばアクセスできるんだから何ら問題はない
281デフォルトの名無しさん
2019/08/03(土) 17:00:41.48ID:s7JzQoXH282デフォルトの名無しさん
2019/08/03(土) 17:08:23.80ID:dTS2sKLx283デフォルトの名無しさん
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 だけでアクセスできるようにした場合に
衝突が起きたのかもしれない。
その話とは関係ないかもしれないけど、以下のようなことがあった。
その時には、理由は追求しなかったんだけど、昔、Javaで
impot com.sun.xxx.xxx.*;
impot com.sun.yyy.yyy;
・・・
みたいなことをやった時、* を付けたことによって javacでコンパイル時に名前衝突が起きた
ことがあった。それで * を使うのをやめて個別に直したら衝突しなくなった。
最後の方の名前は同じで、それを限定している名前、例えば、
zzz.aaa.ccc;
zzz.bbb.ccc;
みたいなのがあって、ccc の部分が同じだから ccc だけでアクセスできるようにした場合に
衝突が起きたのかもしれない。
284デフォルトの名無しさん
2019/08/03(土) 17:18:00.03ID:eeu00PkY >>283
Javaの仕様も忘れてしまったけど、
import zzz.aaa.*; // たまたま zzz.aaa.ccc というのが有ったとする。
import zzz.bbb.ccc;
↑のような場合に、ccc という名前が衝突するのかも。
Javaの仕様も忘れてしまったけど、
import zzz.aaa.*; // たまたま zzz.aaa.ccc というのが有ったとする。
import zzz.bbb.ccc;
↑のような場合に、ccc という名前が衝突するのかも。
285デフォルトの名無しさん
2019/08/03(土) 17:23:56.42ID:L8lVlVkx >>274
> 大部分のここの人達の主張は、直接
>
> std::vector, std::list, ・・・ を書くか、それが嫌なら、
これはよい
でも
> using std::vector;
> using std::list;
> ・・・
>
> を延々と書けというんですよね。
これを言ってる人いたっけ?
名前空間を明示するというポリシーに反してるからおれは使わないな
> 大部分のここの人達の主張は、直接
>
> std::vector, std::list, ・・・ を書くか、それが嫌なら、
これはよい
でも
> using std::vector;
> using std::list;
> ・・・
>
> を延々と書けというんですよね。
これを言ってる人いたっけ?
名前空間を明示するというポリシーに反してるからおれは使わないな
286デフォルトの名無しさん
2019/08/03(土) 17:28:41.36ID:bjverAuH 自分のコントロール下にあるところで機能を使うなってのは自分が上手くつかえないだけの話だわな。
ブロック作ってブロック外と同じ名前の変数作ることすら禁止しそうな勢いだな。
ヘッダで使うなってのは自分のコントロール範囲外でバッティングが生じるからだ。
ブロック作ってブロック外と同じ名前の変数作ることすら禁止しそうな勢いだな。
ヘッダで使うなってのは自分のコントロール範囲外でバッティングが生じるからだ。
287デフォルトの名無しさん
2019/08/03(土) 17:29:59.98ID:rAotfWJY そもそも名前空間の柔軟性は、C++が最強だから。
文句言うのは筋違い。
文句言うのは筋違い。
288デフォルトの名無しさん
2019/08/03(土) 17:34:07.35ID:eeu00PkY そもそも標準のライブラリなので、namespace std の中に入れる必要なかった。
下手に入れてしまったからむしろ std:: を外したときに衝突する問題が
起きる可能性が出てきてしまった。
下手に入れてしまったからむしろ std:: を外したときに衝突する問題が
起きる可能性が出てきてしまった。
289デフォルトの名無しさん
2019/08/03(土) 17:37:28.85ID:rAotfWJY290デフォルトの名無しさん
2019/08/03(土) 17:42:58.60ID:ulHqgYUF Microsoftのmin,maxマクロの事か
291デフォルトの名無しさん
2019/08/03(土) 17:46:28.08ID:eeu00PkY292デフォルトの名無しさん
2019/08/03(土) 17:47:44.86ID:rAotfWJY >>291
殺せ。
殺せ。
293デフォルトの名無しさん
2019/08/03(土) 17:48:34.32ID:rAotfWJY294デフォルトの名無しさん
2019/08/03(土) 17:50:54.20ID:eeu00PkY そういえば、min(), max() は C の時代、確かマクロ実装版が基本だったり
して複雑なことになっているのかな。よく知らないけど。
して複雑なことになっているのかな。よく知らないけど。
295デフォルトの名無しさん
2019/08/03(土) 17:53:29.88ID:3VuQ5ICx そこでBOOST_PREVENT_MACRO_SUBSTITUTIONですよ
BOOST_PREVENT_MACRO_SUBSTITUTIONを崇めよ
BOOST_PREVENT_MACRO_SUBSTITUTIONを崇めよ
296デフォルトの名無しさん
2019/08/03(土) 17:55:43.43ID:rAotfWJY マイクロソフト最大のチョンボだよな。
297デフォルトの名無しさん
2019/08/03(土) 17:59:48.03ID:3VuQ5ICx 関数は関数呼び出しが遅いから使うなマクロにしろ
処理は全部mainに入れろ
という恐ろしい時代から引きずってるから仕方ないといえば仕方ない
処理は全部mainに入れろ
という恐ろしい時代から引きずってるから仕方ないといえば仕方ない
298デフォルトの名無しさん
2019/08/03(土) 18:02:18.88ID:eeu00PkY だったら STL の方が、std::max とかじゃなくて、
std::smax とかにすべきだったような気がしますが。
std::smax とかにすべきだったような気がしますが。
299デフォルトの名無しさん
2019/08/03(土) 18:03:42.44ID:ulHqgYUF NOMINMAXしたらしたでgdiplusでエラーになったので、仕方なくusing std::min;using std::max;を書いてしまった。
300デフォルトの名無しさん
2019/08/03(土) 18:03:43.41ID:SSA79Euw >>288
どんなusingがされている箇所でもstd::をつけさえすれば確実に標準ライブラリにアクセスできるんだから、記述の一貫性を保つのに役立つよ。
どんなusingがされている箇所でもstd::をつけさえすれば確実に標準ライブラリにアクセスできるんだから、記述の一貫性を保つのに役立つよ。
301デフォルトの名無しさん
2019/08/03(土) 18:07:41.16ID:eeu00PkY 元々 min(), max() は非常に古い C時代から #define されているマクロですよね、
std::min(), std::max() と書いても結局マクロ展開されてしまうのでは
ないでしょうか???
std::min(), std::max() と書いても結局マクロ展開されてしまうのでは
ないでしょうか???
302デフォルトの名無しさん
2019/08/03(土) 18:08:18.92ID:rAotfWJY >>298
でも実際に引っかかったら、何でこういうことする!マイクロソフト死ね!!っておまえも思うはず。
でも実際に引っかかったら、何でこういうことする!マイクロソフト死ね!!っておまえも思うはず。
303デフォルトの名無しさん
2019/08/03(土) 18:10:37.82ID:eeu00PkY STL の方の min(), max() を使いたい場合は、
(min)(a,b)
(max)(a,b)
でいけるようです。C/C++ の前処理層によるマクロ展開は
マクロ関数名(
という並びが有る場合にのみ展開されますので。
(min)(a,b)
(max)(a,b)
でいけるようです。C/C++ の前処理層によるマクロ展開は
マクロ関数名(
という並びが有る場合にのみ展開されますので。
304デフォルトの名無しさん
2019/08/03(土) 18:14:26.75ID:eeu00PkY >>302
いや、むしろ逆に、std::min の設計者の方がCの常識を知らない人だな、
と思ってしまいます。
そもそも、min(), max() マクロは、1980年代のC言語の時代から有るよく
知られたものなので、後から登場した C++ 標準ライブラリは、それが
有る場合にでも当然問題なく使えるようにしなくてはならなかったが、
そうなってません。それはどちらに原因があるかは明確です。
いや、むしろ逆に、std::min の設計者の方がCの常識を知らない人だな、
と思ってしまいます。
そもそも、min(), max() マクロは、1980年代のC言語の時代から有るよく
知られたものなので、後から登場した C++ 標準ライブラリは、それが
有る場合にでも当然問題なく使えるようにしなくてはならなかったが、
そうなってません。それはどちらに原因があるかは明確です。
305デフォルトの名無しさん
2019/08/03(土) 18:19:07.11ID:dTS2sKLx >>301
左様
.cppのヘッダファイルをインクルードし終わった以降の適当な場所でおもむろに
#undef min
#undef max
インクルードしたヘッダファイルにマクロ版のmin()、max()に依存したマクロが存在せず、
かつマクロ版のmin()、max()を使わない限りにおいてこれでおk、
左様
.cppのヘッダファイルをインクルードし終わった以降の適当な場所でおもむろに
#undef min
#undef max
インクルードしたヘッダファイルにマクロ版のmin()、max()に依存したマクロが存在せず、
かつマクロ版のmin()、max()を使わない限りにおいてこれでおk、
306305
2019/08/03(土) 18:26:53.75ID:dTS2sKLx 適用条件訂正orz
正: マクロ版のmin()、max()を使わない限りにおいてこれでおk、
インクルードしたヘッダファイルに含まれるマクロ版のmin()、max()に依存するマクロ経由で
間接的にマクロ版のmin()、max()を使おうとした場合はコンパイルエラーになるからワカル
そうなった場合の処置は知らんが、コンパイルが通ったら>>305の方法で安全なはず
正: マクロ版のmin()、max()を使わない限りにおいてこれでおk、
インクルードしたヘッダファイルに含まれるマクロ版のmin()、max()に依存するマクロ経由で
間接的にマクロ版のmin()、max()を使おうとした場合はコンパイルエラーになるからワカル
そうなった場合の処置は知らんが、コンパイルが通ったら>>305の方法で安全なはず
307デフォルトの名無しさん
2019/08/03(土) 18:29:09.20ID:3VuQ5ICx 一番安全なのはこれだってboostの長年の結論だから
max BOOST_PREVENT_MACRO_SUBSTITUTION (a,b)
max BOOST_PREVENT_MACRO_SUBSTITUTION (a,b)
308デフォルトの名無しさん
2019/08/03(土) 18:29:45.19ID:eeu00PkY マクロ版 min(), max() が #define されている状態でも、
#define smin (std::min)
#define smax (std::max)
としてしまえば、smin(a,b), smax(a,b) と書くだけで
それぞれ std::min(), std:max()
が使えるでしょう。
#define smin (std::min)
#define smax (std::max)
としてしまえば、smin(a,b), smax(a,b) と書くだけで
それぞれ std::min(), std:max()
が使えるでしょう。
309デフォルトの名無しさん
2019/08/03(土) 18:32:51.04ID:dTS2sKLx310デフォルトの名無しさん
2019/08/03(土) 18:55:02.09ID:aqiFUikh この手の無駄に一般化は大抵バグを引き起こす。
312デフォルトの名無しさん
2019/08/03(土) 19:47:04.82ID:M1zmWsZu std::を書くと死ぬ人が発狂してるだけなので、std::を普通に書ける人にはしょうもない話
313デフォルトの名無しさん
2019/08/03(土) 19:50:41.99ID:XP2vdzkU これはVisual Studio 2019のバグだろうか?
C++17想定。Wandboxでは問題なし。
namespace user::math::literals {
constexpr double operator""_deg(long double deg) {
return deg * 3.14 / 180.0;
}
};
struct Test {
template<typename T = double>
constexpr double test(T t) {
using namespace user::math::literals;
return 1.0_deg * 8.0;
}
};
int main(){
}
//error C3688: リテラル サフィックス '_deg' が無効です。リテラル演算子またはリテラル演算子テンプレート 'operator ""_deg' が見つかりません
発生条件はクラス内テンプレート関数でユーザー定義リテラルを含んだ式
return 1.0_deg * 8.0;をreturn 1.0_deg;に変えると問題ない
C++17想定。Wandboxでは問題なし。
namespace user::math::literals {
constexpr double operator""_deg(long double deg) {
return deg * 3.14 / 180.0;
}
};
struct Test {
template<typename T = double>
constexpr double test(T t) {
using namespace user::math::literals;
return 1.0_deg * 8.0;
}
};
int main(){
}
//error C3688: リテラル サフィックス '_deg' が無効です。リテラル演算子またはリテラル演算子テンプレート 'operator ""_deg' が見つかりません
発生条件はクラス内テンプレート関数でユーザー定義リテラルを含んだ式
return 1.0_deg * 8.0;をreturn 1.0_deg;に変えると問題ない
314デフォルトの名無しさん
2019/08/03(土) 19:58:09.36ID:M1zmWsZu 普通にビルドできたけどプロジェクトのC++言語基準をちゃんとC++17にしたか?
315デフォルトの名無しさん
2019/08/03(土) 19:59:17.19ID:gpWi1Ho2316デフォルトの名無しさん
2019/08/03(土) 21:04:27.05ID:3VuQ5ICx using namespace はその名前空間の中の名前を私が責任持って現在の環境に導入しますという宣言だ
中身を把握してないくせにそんな事して事故った奴が全部悪いんであって、使われた側には責任はない
stdとて例外ではない
中身を把握してないくせにそんな事して事故った奴が全部悪いんであって、使われた側には責任はない
stdとて例外ではない
317デフォルトの名無しさん
2019/08/03(土) 21:27:39.99ID:dTS2sKLx >>316
使われた側の未来のふるまいまで予測してnamespaceの中身を理解などしていられない件について:
namespaceの正しい使われ方の下では、aというnamespaceに将来どんな名前が追加されようとも
bというnamespaceの名前とは衝突しないはずである
ところがaとbをusing namespaceしてしまったが最後、誰にも責任が持てないカオスが訪れる
これはnamespaceが無かったころの言語に先祖返りするだけではなく、より悪い状況を招くことに注意。
namespaceの利用によって、open、close、copy、find、vector、list、string、.....といった「自然な」名前がいっぱい使用されるからである。
namespaceは崇高だが、using namespaceはそうされることを意図されたnamespace意外には邪悪すぐる
使われた側の未来のふるまいまで予測してnamespaceの中身を理解などしていられない件について:
namespaceの正しい使われ方の下では、aというnamespaceに将来どんな名前が追加されようとも
bというnamespaceの名前とは衝突しないはずである
ところがaとbをusing namespaceしてしまったが最後、誰にも責任が持てないカオスが訪れる
これはnamespaceが無かったころの言語に先祖返りするだけではなく、より悪い状況を招くことに注意。
namespaceの利用によって、open、close、copy、find、vector、list、string、.....といった「自然な」名前がいっぱい使用されるからである。
namespaceは崇高だが、using namespaceはそうされることを意図されたnamespace意外には邪悪すぐる
318313
2019/08/03(土) 21:32:17.54ID:xzejIjJP >>314
再インストールしなおしてプロジェクトの設定をC++17なのを確認してもエラーが出た
うちの環境だけか・・・
Visual Studio 2019 Community Version 16.2.0
再インストールしなおしてプロジェクトの設定をC++17なのを確認してもエラーが出た
うちの環境だけか・・・
Visual Studio 2019 Community Version 16.2.0
319デフォルトの名無しさん
2019/08/03(土) 21:38:58.27ID:M1zmWsZu320デフォルトの名無しさん
2019/08/03(土) 21:51:26.72ID:3VuQ5ICx >>317
完全に同意
そういう事態が起きないと確信できるほど中身を理解してるnamespaceか、起きても問題ないほど狭いスコープか
そのどちらかでしか使ってはいけないものだ
using namespaceというのはそういう乱暴な機能
完全に同意
そういう事態が起きないと確信できるほど中身を理解してるnamespaceか、起きても問題ないほど狭いスコープか
そのどちらかでしか使ってはいけないものだ
using namespaceというのはそういう乱暴な機能
321317
2019/08/03(土) 21:51:59.64ID:dTS2sKLx322デフォルトの名無しさん
2019/08/03(土) 21:54:29.31ID:3VuQ5ICx323デフォルトの名無しさん
2019/08/03(土) 22:06:21.81ID:CM1VqrV7324デフォルトの名無しさん
2019/08/03(土) 22:09:28.81ID:bbhz9sWw using namespaceの話はも止めたら?
使いたい人は使えばいいし
使いたくない人は使わなければいい
でいいじゃん
大した問題じゃないだろ
使いたい人は使えばいいし
使いたくない人は使わなければいい
でいいじゃん
大した問題じゃないだろ
325デフォルトの名無しさん
2019/08/04(日) 00:06:21.11ID:gKArgCAM ダメに決まってるだろw
Coding Standardの話なのにw
Coding Standardの話なのにw
326デフォルトの名無しさん
2019/08/04(日) 01:17:09.87ID:uuq2lSJI どうでもいいだろ
C++のようなアレな言語を扱う上では些細な事さ
C++のようなアレな言語を扱う上では些細な事さ
327デフォルトの名無しさん
2019/08/04(日) 01:20:42.30ID:6uyvUJES そもそもプログラミングは間違ったことを信じている人がはっきり損をする世界
(ことあるごとにエラーが多発するとか作成に余分な時間がかかるとか完成品の質が悪いとかの話で)
リアルで誰かと作業するならともかく
ネットの向こうの間違ってる誰かなんて放っておいても損を勝手に積み立てて自らつぶれていくものだ
(ことあるごとにエラーが多発するとか作成に余分な時間がかかるとか完成品の質が悪いとかの話で)
リアルで誰かと作業するならともかく
ネットの向こうの間違ってる誰かなんて放っておいても損を勝手に積み立てて自らつぶれていくものだ
328デフォルトの名無しさん
2019/08/04(日) 01:21:14.60ID:uuq2lSJI おれはね
C++はね
正しく扱うのに本当にコツのいる言語だと思うんよ
そんな中using namespaceは割とどうでも良いよね
俺は使わない派だが、使いたければ使えばって感じ
C++はね
正しく扱うのに本当にコツのいる言語だと思うんよ
そんな中using namespaceは割とどうでも良いよね
俺は使わない派だが、使いたければ使えばって感じ
329デフォルトの名無しさん
2019/08/04(日) 01:59:42.19ID:xBRRtFJn 確かにどうでもいいな
プルリクで簡単に見つかるから
というかコンパイルや静的解析でエラーにする方法はないかな
プルリクで簡単に見つかるから
というかコンパイルや静的解析でエラーにする方法はないかな
330デフォルトの名無しさん
2019/08/04(日) 09:37:37.80ID:7855nA4b331デフォルトの名無しさん
2019/08/04(日) 18:06:02.62ID:24EQJs3u min(), max() マクロのような件は別として、標準的なライブラリであるところの
std::系の名前は、using namespace std; してもそんなに問題ないということは
無いんですか???
他のライブラリの名前空間 XXX も同時に using namespace XXX; した場合に
もし衝突が起きる場合は、using namespace XXX; だけはしないようにすれば、
特に問題ないような気がします。実際やってみたことが無いので経験者の意見を
聞いてみたいです。
std::系の名前は、using namespace std; してもそんなに問題ないということは
無いんですか???
他のライブラリの名前空間 XXX も同時に using namespace XXX; した場合に
もし衝突が起きる場合は、using namespace XXX; だけはしないようにすれば、
特に問題ないような気がします。実際やってみたことが無いので経験者の意見を
聞いてみたいです。
332デフォルトの名無しさん
2019/08/04(日) 18:48:22.76ID:xBRRtFJn 個人の趣味プログラミングならご自由に
仕事ならコーディング規約にあわせる
コーディング規約作る立場なら、チームにバカが混ざってる前提で非属人的になるようにルールを設ける
で経験を積めば積むほど自分がバカであることが身にしみてわかる
そういうことだよ
仕事ならコーディング規約にあわせる
コーディング規約作る立場なら、チームにバカが混ざってる前提で非属人的になるようにルールを設ける
で経験を積めば積むほど自分がバカであることが身にしみてわかる
そういうことだよ
333デフォルトの名無しさん
2019/08/04(日) 18:54:59.65ID:UDvg82p4 >>331
別に衝突しなくても問題は起こる。
using namespace stdで書いたコードをヘッダーのインライン関数に持って行く必要が出た場合とか、
using namespace std;
#inlucde "...."
となってしまっていてたまたま動いていたコードを、別の箇所でincludeしたときにエラーがでまくるとか。
別に衝突しなくても問題は起こる。
using namespace stdで書いたコードをヘッダーのインライン関数に持って行く必要が出た場合とか、
using namespace std;
#inlucde "...."
となってしまっていてたまたま動いていたコードを、別の箇所でincludeしたときにエラーがでまくるとか。
334デフォルトの名無しさん
2019/08/04(日) 19:00:40.18ID:Rn2rET4f >>333
ほとんど言いがかりレベルw
ほとんど言いがかりレベルw
335デフォルトの名無しさん
2019/08/04(日) 19:02:23.99ID:nZL08BTE std::くらい書けで終わる話をいつまで続けるつもりだ
336デフォルトの名無しさん
2019/08/04(日) 19:04:24.66ID:Is6FE1ys >>335
10万行とかのソースでそれをやりますか?
10万行とかのソースでそれをやりますか?
337デフォルトの名無しさん
2019/08/04(日) 19:06:21.58ID:UDvg82p4 >>336
ところどころについてたり、ついてなかったりするくらいなら、最初からstd::つける方がはるかにマシ。
ところどころについてたり、ついてなかったりするくらいなら、最初からstd::つける方がはるかにマシ。
338デフォルトの名無しさん
2019/08/04(日) 19:06:25.70ID:nZL08BTE やるよ
339デフォルトの名無しさん
2019/08/04(日) 19:09:16.58ID:6Wul5V0e 普通頻繁に使うライブラリをusingするだけで、名前空間ごとはやらんだろ
chrono使う時はたまにやるけど
chrono使う時はたまにやるけど
340デフォルトの名無しさん
2019/08/04(日) 20:26:05.66ID:uuq2lSJI ていうかstd::程度を書くのが面倒な人はC++向いてない
341デフォルトの名無しさん
2019/08/04(日) 20:49:37.11ID:i35UY3P6 size_tにだけ頑なにstd付けない人いるんですがなにか理由あるんですか
342デフォルトの名無しさん
2019/08/04(日) 20:52:21.46ID:Rn2rET4f >>336
1ファイルが10万行じゃないだろ(1ファイルならそこから直せw)
1ファイルが10万行じゃないだろ(1ファイルならそこから直せw)
343デフォルトの名無しさん
2019/08/04(日) 20:54:10.96ID:Rn2rET4f >>341
size_t は大昔からあるのと明らかに型名っぽい名前なのでわざわざバッティングさせる奴もいないからじゃね?
size_t は大昔からあるのと明らかに型名っぽい名前なのでわざわざバッティングさせる奴もいないからじゃね?
344デフォルトの名無しさん
2019/08/04(日) 21:52:28.11ID:UDvg82p4 >>341
size_tはC言語時代から存在してるから、もともとnamespace関係なく使える
size_tはC言語時代から存在してるから、もともとnamespace関係なく使える
345デフォルトの名無しさん
2019/08/05(月) 00:32:36.26ID:Al8hrMjU むしろstdにsize_tあったんだくらいの認識
346デフォルトの名無しさん
2019/08/05(月) 02:02:36.01ID:LDivZuKg おれも知らんかったなまぁ言われてみればたしかにそうだなsize_tってネィムスペィス上でも定義されてたのか今度から一貫性のためにstd::つけとこうかな
まぁ、editorのちょい設定いじるだけなんだがな(´・ω・`)
まぁ、editorのちょい設定いじるだけなんだがな(´・ω・`)
347デフォルトの名無しさん
2019/08/05(月) 12:35:07.05ID:uXNLYXLK >>340
そうでもない。
そうでもない。
348デフォルトの名無しさん
2019/08/05(月) 14:11:04.57ID:uXNLYXLK >>342
1ファイルの行数は関係有りません。
要は大きなプログラムを書いているとき、string で済むところを
全ての箇所で std::string と書くのかということです。
void func(std::string &somename, int a, int b) {
std::string aaa;
aaa = somename + "abc";
}
struct Txxx {
std::string name1;
std::string name2;
・・・・
};
↑のようにタイピングするのは余り賢いやり方だとは思えません。
1ファイルの行数は関係有りません。
要は大きなプログラムを書いているとき、string で済むところを
全ての箇所で std::string と書くのかということです。
void func(std::string &somename, int a, int b) {
std::string aaa;
aaa = somename + "abc";
}
struct Txxx {
std::string name1;
std::string name2;
・・・・
};
↑のようにタイピングするのは余り賢いやり方だとは思えません。
349デフォルトの名無しさん
2019/08/05(月) 14:19:44.18ID:EKfu+tDr そんなに面倒ならusing S = std::stringでもすればいいじゃん
350デフォルトの名無しさん
2019/08/05(月) 14:24:57.77ID:nblSLoEW 過度に賢く振る舞おうとして滑ってるパターン
それくらい普通に書けばいいじゃん
それくらい普通に書けばいいじゃん
351デフォルトの名無しさん
2019/08/05(月) 14:27:04.00ID:xQVlfAfV こういう奴って馬鹿丁寧に一文字ずつ全部打ってんのかね
補完って機能の概念がない世界に住んでんのかしら
補完って機能の概念がない世界に住んでんのかしら
352デフォルトの名無しさん
2019/08/05(月) 14:51:04.49ID:nl2V9bb6 >>348ってジョルノっぽいよな
353デフォルトの名無しさん
2019/08/05(月) 20:01:38.61ID:s1STjseD >>348
> 1ファイルの行数は関係有りません。
> 要は大きなプログラムを書いているとき、string で済むところを
> 全ての箇所で std::string と書くのかということです。
俺は書く。
> ↑のようにタイピングするのは余り賢いやり方だとは思えません。
お前の感想はどうでもいい
> 1ファイルの行数は関係有りません。
> 要は大きなプログラムを書いているとき、string で済むところを
> 全ての箇所で std::string と書くのかということです。
俺は書く。
> ↑のようにタイピングするのは余り賢いやり方だとは思えません。
お前の感想はどうでもいい
354デフォルトの名無しさん
2019/08/05(月) 22:09:13.72ID:B18jZANO >>348
高々数文字のタイピングに拘って名前空間のメリットが理解できないという主張を繰り返すお前さんの行動は、余り賢いやり方とは思えません。
高々数文字のタイピングに拘って名前空間のメリットが理解できないという主張を繰り返すお前さんの行動は、余り賢いやり方とは思えません。
355デフォルトの名無しさん
2019/08/05(月) 22:10:29.33ID:7u4aY/7T■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 [蚤の市★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 [蚤の市★]
- クリスマスの「予定なし」54% [少考さん★]
- 【話題】好きな鍋は?! 「寄せ鍋」「キムチ鍋」「水炊き」「もつ鍋」「豆乳鍋」「ちゃんこ鍋」「ごま坦々鍋」「トマト鍋」 [ひぃぃ★]
- 【STARTO ENTERTAINMENT】SUPER EIGHTの横山裕、フジ『ドッキリGP』ロケで全治2ヶ月の重傷 [Ailuropoda melanoleuca★]
- 地震 [Hitzeschleier★]
- 【実況】博衣こよりのえちえち機動戦士ガンダム逆襲のシャア🧪
- 不動産屋、ついに帰化した日本人まで「内見の段階で」お断りしはじめる [377482965]
- 茶ぁしばこうや···
- J( 'ー`)し「で、アンタなんで働かないの?」 ワイ👶「理由は2つありまして~」🏡
- 日本人億り人、大丈夫なFXで稼ぎまくる… [667744927]
- おさかなさんあつまれえ
