【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/07/18(火) 07:07:27.20ID:vzMDiUgd
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

前スレ
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1478440682/
2017/08/13(日) 01:59:58.88ID:8O7/DK3E
CでぇーROMまんてぃっく
2017/08/13(日) 06:29:34.48ID:03rMAOAx
>>395
それは違う
2017/08/13(日) 06:30:06.63ID:03rMAOAx
>>396
friendじゃなくてもかけるけど
2017/08/13(日) 07:55:49.45ID:WSSr83j3
>>390
ReadOnlyMemory
2017/08/13(日) 08:21:05.43ID:49RznEc3
揮発不揮発は関係ない
読み込みと同等の速度で普通に書き込みが出来るか
Cの場合、普通の代入やmemcpyで普通に書き込み出来るかどうか
2017/08/13(日) 09:45:28.87ID:HI8S2XNx
>>398
おまえのマイコンにはCDROMが内臓されてるのかよ。馬鹿は休み休みいえ。
2017/08/13(日) 10:05:31.19ID:HI8S2XNx
>>401
また頓珍漢なことを。
2017/08/13(日) 10:16:39.11ID:TSMbvEPJ
>>395
メモリの不揮発性ってのは意味合いが違うぞ。
フラッシュメモリは不揮発性だがROMではない。
2017/08/13(日) 10:25:56.46ID:HI8S2XNx
EEPROMの一種だろうが。組み込み経験ない奴はもうレスすんな。
2017/08/13(日) 10:37:54.73ID:TSMbvEPJ
組み込み経験と何の関係がw
2017/08/13(日) 10:38:05.69ID:PA7iDDOj
>>399
普通friend指定はこのようにするとおもう
http://www.sirochro.com/note/cpp-class-friend-function/

それを
http://ideone.com/qc8SUA
のように出来るのはキモいと思うが
2017/08/13(日) 11:19:48.45ID:HG5dPUko
>>404
フラッシュメモリはROMの仲間だけど…
2017/08/13(日) 11:20:22.74ID:md5XkZ0n
EEPROMはROMなのか?
2017/08/13(日) 11:31:45.02ID:HG5dPUko
不揮発性だけどROMでしょ
2017/08/13(日) 20:43:58.81ID:Tf2liO6H
そりゃ揮発性のROMって意味ないから...
2017/08/13(日) 21:09:32.11ID:1akT1/u1
肉抜きのステーキとかチーズ抜きのチーズバーガーみたいなもの?
2017/08/13(日) 23:37:23.43ID:b2PcXx/4
そういうこと言うから豆腐ステーキとか書きたくなる
2017/08/13(日) 23:41:05.82ID:WikyJvVl
>>356
そういう仕事をするハメになったら
タラタラ文句言うだけで成果出せなくてもいいの?
2017/08/13(日) 23:45:20.52ID:WikyJvVl
ん?天抜きとかたのまないの?
2017/08/13(日) 23:51:34.49ID:TSMbvEPJ
天ぬきは天ぷら抜きの天ぷら蕎麦じゃないからな。
2017/08/14(月) 00:40:01.90ID:NpV9/t44
世の中知らんやつらが多いな
2017/08/14(月) 00:46:16.17ID:NpV9/t44
フラッシュもEEPROMもROMと呼ばれる
ROMの語源はRead Only Memory
でも、今は消去や書き込みが可能なメモリにも使われるようになった

読み書きともランダムアクセスが可能で、アクセス時間も読み込みと書き込みで大きな差が無いものがRAM
DRAMやSRAM, MRAM, FRAMがこの範疇

そうでないものがROM
NAND, NOR, EEPROMなんかはROMという扱い
2017/08/14(月) 00:59:13.70ID:qET1a6fj
いろんな人がいるね。
俺の中では電源切っても覚えてるかどうかの違いだよ。
2017/08/14(月) 01:00:55.60ID:NpV9/t44
MRAMはROMか?
FRAMはROMか?
2017/08/14(月) 01:16:56.43ID:qET1a6fj
ROMです(俺の中ではね)
2017/08/14(月) 01:33:45.85ID:IT2ffc23
ID:qET1a6fjが非常識なのはよく分かったけどあまり言いふらさない方が生活し易いと思うよ
2017/08/14(月) 01:37:55.14ID:IeoGyZA4
もう少し役立つ話題にしろよ
424デフォルトの名無しさん
垢版 |
2017/08/14(月) 04:51:13.03ID:qbtpazWw
template <typename T>
class DataStoreArray
{
public:
explicit DataStoreArray(std::size_t size) : mValueArray(new T[size]) {}
~DataStoreArray() { delete [] mValueArray; }
inline T operator[](std::size_t index) const
{
cout << "from primary : T : " << index <<endl;
return mValueArray[index];
}
inline T& operator[](std::size_t index)
{
cout << "from primary : T& : " << index <<endl;
return mValueArray[index];
}
private: T* mValueArray;
};
int main()
{
static const int size = 3;
DataStoreArray<int> iStoreArray(size);
for (int i = 0; i < size; ++i)
{
iStoreArray[i] = i * 10;
}
}
from primary : T& : 0
from primary : T& : 1
from primary : T& : 2
iStoreArray2[i] = i * 10;で[]をオーバーロードした時
戻り値がT&のほうが呼び出されるのはなんででしょうか?
2017/08/14(月) 05:23:42.65ID:P3rVXCaa
class Point {
public:
Point() {}
int x, y;
};

std::vector<Point*> vec;
vec..push_back(new Point());

こんな感じに作られたvectorの中のPointを解放するにはどうしたらいいでしょうか
以下のようなコードを考えて実行していたところ、free_base.cppというところで例外が発生しました
内容は「block Error reading register value.」です
for (unsigned int i = 0; i < vec.size(); i++) {
delete vec[i];
}
426424
垢版 |
2017/08/14(月) 05:24:58.54ID:qbtpazWw
>>424
自己解決しました。
427デフォルトの名無しさん
垢版 |
2017/08/14(月) 05:58:41.65ID:qbtpazWw
>>425
タイプミスとは思うけどvec..push_backのドット2つ付けてるのが原因じゃ
2017/08/14(月) 18:57:13.14ID:6kKovBuY
>>427
それではないです
2017/08/14(月) 19:38:37.75ID:0VcPF6xv
>>425
コンパイラーを変えてみたら?
2017/08/14(月) 20:02:20.41ID:cPbpYqjZ
↑バカ
2017/08/14(月) 21:00:06.87ID:2BlD9S+P
>>425
ここに書いてない部分に問題がある気がする
2017/08/14(月) 21:09:59.18ID:4UD3Pot4
>>431
delete済みのポインタを更にdeleteしてたりしてな
2017/08/14(月) 22:15:23.49ID:IeoGyZA4
>>425
stackoverflow.comで聞くといいよ
2017/08/14(月) 22:21:54.47ID:i3ERgNqH
2chにコード書きこんで質問するんなら
そのコードで問題が再現するのかどうなのかぐらい確認してから
書き込んだ方が良いだろうな、常識的に
2017/08/14(月) 23:12:49.50ID:G751meAI
でも2chだからなー
2017/08/14(月) 23:24:57.28ID:gV3KeQMV
普通は再現する最小限のコードこさえてる時点で
たいていはバグの原因に気付いて質問やめる
2017/08/15(火) 00:30:11.65ID:ILMibSrs
> block Error reading register value

これ何のエラー?
2017/08/15(火) 01:01:30.84ID:xb8goknd
>>437
WindowsのHeapFreeが出したりするエラーで基本的にはメモリをぶっ壊してる事に起因するらしい
ただしリビルドしたら治ったとかいう話もあったりしてなんだか分からない
2017/08/15(火) 01:17:41.90ID:ILMibSrs
なら、流行の方法は知らないけど、ポインタを最初にNULLできちんと初期化して
NULLチェックしてからdeleteして、deleteしたら忘れずにNULLで初期化すれぱいいんじゃないの。
2017/08/15(火) 01:36:52.39ID:RtDnkjIA
スマポ使え
2017/08/15(火) 01:43:30.18ID:z7TEyY+0
>>439
deleteするときのNULLチェックていらないよね
NULL(nullptr)のdeleteは何も起こらない保証があるから使い終わった後にNULL代入するのはよくやるけど

まぁ今どきのC++なら素直に>>440だね
2017/08/15(火) 02:48:07.41ID:ILMibSrs
調べたらいっぱいあって余計に混乱しそうだわ
auto_ptr
unique_ptr
shared_ptr
weak_ptr
2017/08/15(火) 06:24:37.22ID:/mWh256Z
>>442
ナマポで自分でやるのがいいよね
2017/08/15(火) 08:15:54.91ID:GzAS59pw
>>442
auto_ptr ⇒ オワコン、使用禁止
unique_ptr ⇒ 共有しないならこれ
shared_ptr ⇒ 共有するならこれ
weak_ptr ⇒ はて?いつ使うんだこれ
2017/08/15(火) 08:22:05.26ID:nyBipa/m
なんか循環参照がどうとか言う時に使う
2017/08/15(火) 08:37:37.53ID:X4XuSaPF
weak_ptrってかシンプルなreference_ptrみたいなのがほしい
2017/08/15(火) 10:08:07.69ID:JqN6tr9G
それなら生ポで良いじゃん
2017/08/15(火) 15:03:52.07ID:cAweUVNO
話題に便乗して。
new,delete満載の既存のコードをスマポに置き換えてくコツみたいのってあります?
作り直したほうが早いのかな
2017/08/15(火) 18:45:11.19ID:tu7eHngw
shared_ptrか生ポの入ったvectorを基底クラスにアップキャストするスマートな方法おしえてください
割と使うくせに良い方法が思いつかない
2017/08/15(火) 19:01:49.84ID:Q70B1fQS
>>448
p = malloc()

p = std::make_shred<てきとー>() に置き換えて delete() を消す…
2017/08/15(火) 23:43:12.59ID:VOm+amDT
アップキャストは特に何もしなくても必要になれば勝手に安全にアップキャストされるから
アップキャストするスマートな方法って質問の意図が良くわからない
というか、安全に勝手にアップキャストされるのは静的型のメリットの一つだし
2017/08/16(水) 00:01:22.48ID:2E64Am1a
あーやっと質問の意味が分かった
vectorをvectorごとアップキャストして別のvectorに代入するのか
そんなことしたいと思ったこともなかったから分からなかったわ
アップキャストするときにアドレスをオフセットしなきゃならない場合があるから
勝手にはしてくれないんじゃないかな
たしかC#は勝手にしてくれるんだっけか
2017/08/16(水) 00:25:49.33ID:2E64Am1a
なにかstd::の中に便利なものが用意されているかもしれないが
template< typename _t, typename _u >
void copy( std::vector<_t> &dst, std::vector<_u> &src )
{
  auto size = src.size();
  dst.resize( size );
  auto dst_ptr = dst.data();
  auto src_ptr = src.data();
  for( size_t i = 0; i < size; ++i )
  {
    dst_ptr[ i ] = src_ptr[ i ];
  }
  return;
}
このような感じの適当なテンプレートでも作って対応したらどうですかね
もうちょっと汎用性を持たせることも出来るけど、std::listとかまず使わんし
vector専用ってことで良いんじゃないかな
2017/08/16(水) 00:44:05.66ID:2E64Am1a
あ〜でもデフォルトのアロケータにしか対応しないのはアレか

template< typename _t, typename _u >
void copy_vector( _t &dst, _u &src )



template< typename _t, typename _u, typename _v, typename _w >
void copy( std::vector<_t, _u> &dst, std::vector<_v, _w> &src )

の方が良いのかね
2017/08/16(水) 00:49:08.01ID:N/6IcKLl
x.assign(y.begin(), y.end());
2017/08/16(水) 01:52:38.36ID:wWWqM4+K
典型的なautoの弊害コードだな。
2017/08/16(水) 15:14:24.51ID:mnlpMbS3
strcmp で長さ0の文字列同士を比較した場合の結果は規定されてますか?
2017/08/16(水) 16:09:03.15ID:53LlWcIm
>結果は規定されてますか?
Yes
ISO/IEC 9899:2011 7.1.1/1では終端ヌルはstringの一部なので同じと見なされるだろう
ISO/IEC 14882:2014 21.8のstrcmpはCの規格丸投げなので同じだろう
459457
垢版 |
2017/08/16(水) 16:17:21.15ID:mnlpMbS3
ありがとうございます
2017/08/16(水) 19:58:01.86ID:SkaUp3/b
>>454
こういうtemplateやtypenameが入り混じったc++のソースってc#好きの俺には耐えられん。ごちゃごちゃしていて見た目が美しく無いよね。
2017/08/16(水) 20:00:25.84ID:SkaUp3/b
ああ、454さんを批判する意図は無いのでお間違いなく。
462デフォルトの名無しさん
垢版 |
2017/08/16(水) 21:21:06.13ID:64ASz8nj
int main() {
std::deque<int> deq(10);
const std::deque<int>::size_type size = deq.size();
for (int i = 0; i < static_cast<int>(size); ++i) { deq[i] = i; }
std::cout << deq.front() << std::endl;
}
配列のサンプルコードで
const std::deque<int>::size_type size = deq.size();
こういう記述を良く見るんですが、
int size = deq.size();
では駄目なケースとかあるんですか?
2017/08/16(水) 22:14:04.28ID:1Ba2PBWP
テンプレートのウザイ仕様です
型に依存したコードにならざるをえないのに、
使えと強要するような型定義
2017/08/16(水) 22:15:53.93ID:1Ba2PBWP
ていうか、キャストしてるから動作は同じだな
2017/08/16(水) 22:45:16.00ID:zl8YLx97
それより
auto size = deq.size();
for (int i = 0; i < size; i++ );
で比較の部分に警告が出るのを何とかして欲しい
2017/08/16(水) 22:48:56.53ID:TFzMtZDz
なぜ、decltype(size)とすら書かないのか…
2017/08/16(水) 22:54:21.64ID:zl8YLx97
for (decltype(size) i {}; i < size; i++);
ごめん、生理的に無理
2017/08/16(水) 22:56:56.26ID:HDO3jlPo
>>467
じゃあ、やめときな
生理的にあわない言語だったんだよ
さようなら
2017/08/17(木) 02:50:59.58ID:POHMQxDJ
どっちもsize_tじゃアカンの?
2017/08/17(木) 03:45:02.07ID:sil69yD8
この手の話をする時間が勿体ない
c++の言語仕様に悩む時間が無駄
俺も頃合みて捨てるわ
2017/08/17(木) 03:47:16.62ID:6E9r52D/
組み込み、OS、ドライバを書く言語ではなくなったな。
2017/08/17(木) 03:49:09.87ID:K5IWxEsn
>>469
あかんよ。
この場合、 deq の型はたぶん deque を想定してるんだと思うけど、
deq.size() の返却値が size_t である保証はないはず。 (他のコンテナでも同様)
この型はあくまでも deque::size_type なので、
まあ一般的には size_t と同じになるだろうけど厳密に言えばそれをあてにするのはよろしくない。
2017/08/17(木) 06:22:12.53ID:zzoRHhsR
sizeとdeq.size()が同じ型である必要はない
sizeがdeq.size()の値を保持出来れば何でもいい
charでもビットフィールドでも
2017/08/17(木) 07:08:05.04ID:6E9r52D/
グダグダ感が半端ないな。そりゃ全てを捨ててJavaやC#を作りたくなるわ。
でもJavaやC#がC++と同じ道を歩んでて笑える。
475462
垢版 |
2017/08/17(木) 08:47:14.10ID:XAlxh4c7
とりあえず万全を期すためにってやつみたいですね。
レスありがとうございました。
2017/08/18(金) 08:12:05.04ID:Df++WDQ/
[var1 var2] = func();
みたいに返り値2つにする方法ってないですか
2017/08/18(金) 08:19:11.14ID:cQGhZEXD
二つを含んだ構造体やクラスを返す
引数にアドレスや参照を渡してそこに書いてもらう
グローバル変数経由で返す
ファイル経由で返す
...
2017/08/18(金) 08:25:33.13ID:jeMQJBsl
>>476
std::tupleでググれ
2017/08/18(金) 08:40:55.93ID:nZKbkzFD
いいかげんCとC++分けようぜ
2017/08/18(金) 09:18:42.99ID:tz1eiY37
>>476
有ります
2017/08/18(金) 09:21:26.56ID:tz1eiY37
きっと昨日Visual C++をバージョンアップして
できるようになったのが嬉しかったに相違ない
2017/08/18(金) 11:50:59.94ID:CFJX4XlT
初心者歓迎スレなんだから、>>480みたいな小学生の悪ふざけみたいなレスはやめよう。
すでに真っ当な回答も出ているのに。
2017/08/18(金) 13:03:51.12ID:Df++WDQ/
>>477-478
ありがとうございます
tuple使おうと思います
2017/08/18(金) 13:07:19.75ID:jeMQJBsl
>>483
ついでにstd::tieもググっとくといいかも
2017/08/18(金) 21:34:14.61ID:dvMMsT1N
初歩的な質問で申し訳ないのですがC言語のおすすめの開発環境はなんでしょうか
調べてみたら結構種類があって自分で選ぶことができないです
2017/08/18(金) 21:39:48.25ID:sjvn+N2b
>>485
リッチな環境が望みなら、
Visual Studio 2017。
貧乏人は
MSYS2とテキストエディタ。
487デフォルトの名無しさん
垢版 |
2017/08/18(金) 21:41:06.02ID:yRxu02Qs
意見が割れそうだけど、迷うくらいなら、winならvisualstudio, macならxcodeでも使ってみては
取り敢えずデバッガが手軽に使えれば何でもいい気はする
2017/08/18(金) 21:41:55.55ID:enWn3c7M
その前にそちらの環境を
2017/08/18(金) 22:18:09.85ID:dvMMsT1N
>>486
>>487
ありがとうございます!
visual studioでやります!
2017/08/18(金) 22:46:00.68ID:FB1E6DTF
学生時代と就職当初はC、現在はJavaとCsharpを主にやっています
最近C++を独学で勉強しようと思って調べはじめたした
印象ですが、これは言語作った人はどうみても天才で変態なんじゃないかと思いました
言語仕様としてはJavaなんかの方が広いかも知れないけど…
奥深さというか、底無し沼な予感というか最強なのでは?との印象を持ちました
2ちゃんねるなんかで見るかぎりあまり人気のある言語では無さそうですが、これはJavaなんかでも同じでWeb屋さんとかが言ってる気がしました

以上が自分の現時点での感触なのですが、大きく外れてはいませんでしょうか?
釣りとかでは一切ないです
2017/08/18(金) 22:56:37.18ID:R7MrN97k
さいきょーだとかの漠然とした印象とか持つんじゃなくて、それぞれの言語の長所短所とか、どういうケースで使われているとか、そういうのをちゃんと調べたら?
2017/08/18(金) 23:03:57.12ID:w2enVJbE
C++は言語ヲタク的には際限なく楽しいけどそれだけ
今直ぐ実現したい何かがある時はpythonかphpで済ませちゃうw
お仕事の人はそんな自由ないだろうからガンダムしかない
2017/08/18(金) 23:52:59.71ID:B0LmSygc
>天才で
ものは言いようだな
複雑な概念を分かりやすく整理できる人間はこんなUNKO言語は作らない
2017/08/19(土) 05:46:25.10ID:65TMOtSV
新機能を使いたがる馬鹿は採用しません。
2017/08/19(土) 11:11:21.66ID:2Vqw9aXW
>>486
意味わからん
Community Editionは無償だぞ
2017/08/19(土) 11:37:47.76ID:fJjUBUKN
C++は天才の言語と言うよりは、無駄に意識高い人の言語。
関係ないけど京都出身のプログラマはC++使ってる奴多い印象。
一見さんお断り的な文化が合ってるんだろう。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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