TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
LLにおける関数型プログラミング
将来性ないプログラミング言語。Delphi含まれず安心
ふらっと C#,C♯,C#(初心者用) Part147
Android SDK以外でのアプリ作成を全面禁止へ
【COBOLから】バッチ処理【Javaまで】
オブジェクト指向ってクソじゃねぇかよPart4
Pythonのお勉強 Part62
データベースプログラミング全般スレ
くだすれDelphi(超初心者用)その58【Embarcadero】
初心者の俺が初めて覚えるプログラム言語

【初心者歓迎】C/C++室 Ver.103【環境依存OK】


1 :2018/07/01 〜 最終レス :2018/09/11
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.2ch.sc/test/read.cgi/tech/1509780815/

2 :
こんばんは。質問です。
Win32APIで現在OSが再生中の音声の値を取得する方法を教えてください。
その瞬間の値をLR各1個取れればいいですが、ある程度連続的に配列に取り込めるほうがベターです。
スペクトラムアナライザを作ろうと思います。
Windows10/Visual Studio 2017/ C or C++です。

3 :
sqrt(2.0);
sqrt((double)2);

後者の俺はおかしいですか

4 :
うん
それ以前に定数にsqrt()なんて使う時点で

5 :
もしかして、実行時刻や国によって計算結果が異なるのかも知れない
あるいは、希に発生する宇宙線の影響を検出したいという意図が有るのかもしれない
あるいは実行環境のバグを検出しその後の処理を切り替えたいとか

6 :
正確に√2とか√3を定数で持つにはどうしたらいい?

7 :
>>6
そもそも浮動小数点数で無理数を正確に表すこと自体が不可能だけど、どこまでの精度を求めてるの?

8 :
有理数を使えば良いじゃね?

9 :
>>7
sqrt呼ぶのと同精度でいいよ

10 :
√2と√2をかけ合わせたらちょうど2を返す無理数クラスなら作れそう
すでにありそう
素因数分解が必要そうだから結構面倒になるかな?

11 :
無理数というか、冪の底と指数をそれぞれ有理数で持つ、
という形式ならいけそうだな。

有理数クラスの約分に相当する処理を自動的にやらせる感じ。

12 :
>>4
>>7
3じゃないけど、定数でsqrt呼ぶのがだめというだら、代案を示してほしい。

13 :
#define SQRT2 1.414213...(必要な桁)
で充分だよ

14 :
そこはせめて
static const double SQRT2 = 1.414213...(必要な桁)
にしようよ…

15 :
18Z

16 :
vcのcl.exeでc書いてるんだが、20億バイトのmallocがnull返します。
何とかなりませんか?

17 :
>>16
64bitでコンパイルされたし

18 :
実メモリが載ってなきゃ意味ないぽよ。 とマジレス。
まあ今どきはそういうデスクトップマシンも無くはないけど……。

19 :
(vc ってあるから Windows 前提で)
malloc のアロケーターの実装とセットになって
OS がよきに計らってくれないものなのかな

20 :
20億バイトって約2GB、31bitで表せる範囲ではあるのか。
プロセスあたりメモリ2GBの制限に引っかかってるのかな。
この20億バイトのmallocの他にもメモリを使っててトータル不足とか。

プロセスで使えるメモリを3GBにする設定とかあるんだっけ。
あとはOSを64bitにするか。

21 :
あ、 20 億ってたったの 2GB か。
でもまあメモリ空間が足りないとどうしようもないよな。

22 :
そらプロセス起動してんだから
mallocでプラス2GBとか普通は32bitじゃ無理

23 :
実際にやったわけじゃないけど、軽く調べたところ、
32bitのWindows上のプロセスで2GBより大きなメモリを使うためには…
・OSの動作モードを「カーネルで1GB, プロセスで3GB」のメモリ配分に変更
・リンク時にオプション /LARGEADDRESSAWARE を指定
…という具合に、動作環境と実行ファイルの両方での対処が必要みたい。

さらに加えると、Win32APIの HeapAlloc() を使わないとダメかも。
これはライブラリの malloc() がどう実装されてるかによるが。

24 :
64bitでコンパイルしたらいけますた。

25 :
>>24
それは良かったでちゅね
良いこ良いこ

26 :
for( a : コンテナ)ってしたときのアクセスは内部的にどうなってるんですか?
@コンテナのat(size_t)を呼び出している
Aコンテナにイテレータがあればイテレータ
Bコンテナにイテレータがなくat(size_t)があればat

27 :
生配列の場合は*<配列のポインタ>、
コンテナ.begin()が定義されていれば*<コンテナ.begin()が返却するもの>、
そうでなければ*<std::begin(コンテナ)が返却するもの>
で要素アクセスする。

at()はオーバーヘッドがあるので、forに限らず、将来的にもコンパイラが知らぬうちに呼びだすことはないと思うよ。

28 :
atしかなかった場合は!?

29 :
コンパイルしてみろ。答えは3秒で分かる。

30 :
>>26
begin 関数と end 関数で帰ってくるイテレータで繰り返すようになってる。
標準ライブラリにあるコンテナの場合は std::begin と std::end が適用されて、
これは基本的にはそれぞれのコンテナのメンバ関数 begin と end をそのまま呼び出すが、
配列などのために特殊化した版が用意されている。

自分が独自に作ったコンテナを range based for に対応させたい場合は、
メンバ関数として begin と end を持っておけば std::begin と std::end 経由でそれが呼び出されるし、
非メンバ関数としてそのコンテナの型を受け取れる begin 関数と end 関数を用意してもよい。
どの名前空間にある begin 関数と end 関数が呼び出されるかは ADL で解決されるんだが、
このあたりの理屈は面倒なんで ADL をキーワードにしてググって。

独自に用意したコンテナについて、やりたければ at を呼び出すように作ることはもちろん出来るよ。

既存のコンテナについても、 std::begin と std::end を特殊化すれば、現実には挙動を変えられたりもするが、
std 名前空間にある関数をオーバーロードすることは禁止されていて、
std 名前空間内のテンプレート関数の特殊化も (全面的に禁止ではないが) 制約があるので、
規格の範囲内ではカスタマイズすることは出来ないと考えて良い。

31 :
>>30
詳しい情報サンクス

32 :
>>28
あっと驚く

33 :
ストラウストラップのプログラミング言語C++を読んでいるのですが、

auto を使えとか、

int a = 1;

よりも

int a {1};

のほうがいいだとか、書いてありますが、本当にこれにしたがったほうがいいのでしょうか?

他の本とスタイルが違うように思います。

34 :
いいよ。問題ない。
c++11以降はそっちが推奨。

ただ会社で使うと周りがついてこれないから直せと言われるかもしれない。

35 :
>>34
ありがとうございました。

36 :
ITドカタになりたいなら
現場のコーディング規約に従いなさい

ドカタになりたいのにドカタのオキテに従わないのよくない
ドカタにしばかれるぞ

37 :
土方になりたいやつはJSやれ

38 :
整数の宣言時の初期化はどう書くのがオヌヌメなん?
int a = 100;
int b(200);
int c{300};
俺は昔はaで統一してて最近はbに統一してるけど、なんとなく

39 :
三行目から初期化という強い意志を感じる

40 :
>>38
『プログラミング言語C++』第4版ではc{300}の書き方をオヌヌメしてる。
(p.168 6.3.5 初期化)

C++11以降でないと使えないのが欠点だって。

41 :
>>39
とんくすこ
勉強になりました

42 :
×>>39
>>39-40

43 :
てす

44 :
ASCIIコードのエスケープ文字列を変換してくれる標準関数ってなかったっけ?
2文字の "\n" を 1文字の 0x0a に変換してくれるような

45 :
寝言は寝てから言え

46 :
>>44
無い。

47 :
\nは1文字だぞ、と何故教えてやらないのか

48 :
ソース中の \n はプリプロセッサが変換してくれるけど
標準入力とかの外部入力から \ n (0x5c 0x6e) を渡して
それが 0x0d になって欲しいんじゃないの?

49 :
>>47 コマンドラインから "\n" て与えるとコード上の "\\n" 相当になる
わかりにくくてすまん

>>46 やっぱ無いのか。サンクス

50 :
>>44
sprintfに渡したらいかんのか?

51 :
あうち 0x0a だった

いずれにしろ標準関数にはないね

52 :
ごめん、その変換はコンパイラの仕事か。

53 :
ロベールの本を読んでいます。
メンバ関数ポインタについて質問です。

int (*Calculator::mfp)();
int (Calculator::*mfp)();

のどちらが正しいかという話が書いてあります。


あとは「どこに」つけ足すかですが、これは簡単に考えると2種類考えられます。

int (*Calculator::mfp)();
int (Calculator::*mfp)();

しかし、静的メンバ変数として普通の関数ポインタを作った場合を考えると、前者
では問題があることが分かります。

typedef を使わず静的メンバ変数として普通の関数ポインタを作ると次のようになります。

class Calculator {
public:
static int (*mfp)();
};

int (*Calculator::mfp)();

静的メンバ変数の実態を定義する時には変数名の前に Calculator:: をつける必要があります。
しかし、もし前者の宣言法が正しいのであれば、この静的メンバ変数の実体定義と区別
がつきません。これでは困りますね。

ということで、後者の宣言法が正しいと推測されます。


54 :
何が言いたいのか分かりません。

55 :
質問は何?

56 :
メンバ関数ポインタの*つける場所、みんな迷っちゃうよね?ね?
でも心配しなくていいよ!

だって先頭に*付けたらstaticなメンバ関数ポインタの実体定義とグローバル変数として定義したメンバ関数ポインタが区別つかなくなっちゃうじゃん?
だからどこに付けるか分からなくなっても推測できるから安心だよ!ラッキー!

ってことじゃね?
(俺はググるけど)

57 :
型名 (*{名前}opt)(引数) と来たら関数ポインタ
型名 (クラス名::*{名前}opt) と来たらメンバ関数ポインタと
馬鹿の一つ覚えで認識しているのでこれ以上ややこしくされると困るわ

58 :
(this の渡り方とか不安で メンバ関数のポインタは使わずに
 this を引数にする普通の関数のポインタを使っちゃう)

59 :
>>53
>int (*Calculator::mfp)();
これは、mfp は普通の関数(static メンバ関数=メソッド)のポインタ、int (*f)() と同じもの

>int (Calculator::*mfp)();
::*
->*
という演算子が別途存在する、と覚えておく
::*
->*
の使い方は、
https://mevius.2ch.sc/test/read.cgi/tech/1434079972/39

60 :
>>59
訂正します
「=メソッド」は削除してください、これは間違いですね
static メンバ関数は、this を必要としない(普通の)関数
::*, ->* は「インスタンスメソッド」に使います

61 :
>>59
実際別の演算子だし
使いどころも少ないので
どちらか迷うなんてことは今まで考えたこともないんだけど

ロベールさんは迷う事がよくあるってことなのかな?

62 :
コンピュータの基礎的なことを勉強するのに、
以下の本から読むというのはどうでしょうか?

その後、コンピュータアーキテクチャの本や
OSやコンパイラの本を読むというプランは
どうでしょうか?

低レベルプログラミング
Igor Zhirkov
固定リンク: http://amzn.asia/e6zmk4x

63 :
どうせなら、FPGAでCPUから作るところからすれば良いぞ

64 :
>>59
頭悪いんだから偉そうに書くなやwww

65 :
ロベールの本って細かいことが書いてありますが、それらは本当に重要なんですか?

柴田望洋訳のC++とどっちがいいですか?

66 :
>>63
工作など面倒なことはしたくないです。

67 :
>>64
C/C++ スレを粘着の侵略から守るため、必死で闘った。
しかしそれが正義などではなく、太古の昔から繰り返されてきた煽りあいの歴史をなぞっているだけである事もよく知っていた。
哀しかったよ。いや、馬鹿になった事がじゃない。C/C++ を勉強した事がだ。C/C++ は破産するまで終わらないゲームなのだ。
たぶん間抜けな猿が始めたに違いない。
fj へ戻れだと?道は一本きりではないか。
大切なのは自分の立場を見つけることだ。そこで何を煽るべきか何を煽るべきでないかを考える。
本物の目玉は鼻の上についている一組分、それだけだ。
そこから見てみろ、なにが見える?

68 :
ロベールの本を見ていると、C++って色々と文法面で無理をしているなと思います。

69 :
C++の初心者スレってここであってますか。
改行に使うのって <<endl;で覚えて問題ないですか?
以前入門書を買ってその時は読んでる本が難しすぎて勉強自体やめてしまったんですが
先程ロベールの入門書を買ってきて始めたんですが、以前読んだ本には\nと書いてあった気がします。(うろ覚え)
どっち使っても変わらないですか

70 :
そんなの理解出来ないなら、ローベルの入門書なんて捨てろ

71 :
\nとendlの違いは今読んでる範囲では全く説明されてないんですが。
他にC++初心者スレあったら誘導お願いします><

72 :
>>71

ロベールの本で "\n" と std::endl の違いは説明されています。

73 :
ほんとですか?
今読んでる限りでは特に説明がないような・・・
始めたばかりなので当然最後まで読んではいませんが後のほうのページで説明されてるんですかね

74 :
>>69
\nは文字としての改行コード
endlは改行込みで且つバッファを即空になるまで書き出す命令

イメージとしては\nを読み込んだ時に呼び出される改行処理を直で呼び、且つflushも呼び出します

\nだけではflushが起こらずただバッファに\nという1バイトが入るだけ

何が違うのだろうか? それはいきなりアプリが落ちた時に判る
まだ書き出ししてないバッファの内容は消失する

なぜそんな危険があるのにバッファなんてものを使うのか?
それはIO装置がメモリに比べてとても遅いから律速されるためだ
一旦メモリに溜めておいて最低回数で一気に書き出した方が速い

75 :
1バイトじゃない場合もあるで

76 :
>>74
詳しくありがとうございます
今の段階ではなんのこっちゃ分からないですが…どちらで覚えても問題はないですかね

77 :
せっかく違いを説明してくれてるのにその結論なのか……。

78 :
いや・・・他の言語経験あるとかならともかく始めたばっかなもので^^;
アプリ作成経験なんて当然皆無ですしバッファの意味も分かりません…
だから今の段階で疑問に持つようなとこじゃないのかなと

79 :
「問題無いですかね?」に対しては「いいえ」としか言いようがない
色々問題はあるだろうけど理解出来ないところが先ず問題だな

80 :
こんなところで聞くより自分で調べた方がいいよ

81 :
>>78
でも疑問を持ったから質問したんだろ?

違いの内容を (今は) 理解できなかったっていうのは仕方ないかもしれんが、
違いの説明をしてるのにそれを無視する結論では回答者を馬鹿にしていると取られても仕方ないぞ。

わからなかったのがバッファについてなら、それをキーワードにしてググればいくらでも解説が出てくるし、
それもよくわからなかったのなら「参考にして本を読み進めてみます」くらいの言葉で締めとけよ。

82 :
>>81
もちろん感謝してますし、無視せずお礼も言ってるはずですよ。
まぁ文章力がないのでそういうふうに捉えられてしまったかもしれません。どうもすいません
読んでそうそう前の入門書と違う表記でモヤモヤしたのでそれが解決しただけで収穫だと思ってます

83 :
>>78
おしっこに於ける膀胱がバッファに相当する
膀胱が無ければ腎臓により生産された尿は即排出せねばならない
君がデートの最中でもだ

84 :
はちみつの説教うざい
2chに何を期待してるんだか

85 :
>>84
ああ、説教に見えた?
端的に言い直すわ。
俺がヤだ。

86 :
礼すら言わない質問者も多いのに、噛みつくようなことかね

87 :
>>85
お前の感想とか興味無いしスレチ

88 :
>>83
天才かよ

89 :
visualstudio2017Communityをインストールしたのですが空のプロジェクトを
新規作成しても何も出てきません。何が原因なのでしょうか?インストールする際にたくさん
選ぶ項目がありましたがその際に何か選択しわすれていたのでしょうか・・・?

環境はwin10 64bitです

90 :
空のプロジェクトは空だから

91 :
>>90
ありがとうございます
からのプロジェクトって何も書いてない真っ白なページが出てくるんじゃないんですか?
何も出てこないんですけど・・・・。

92 :
何回かアンインストール、再インストール繰り返してるんですが
一回一回のアンインストール時間等もかなり長くキリがないので
どこどこのページでどれをインストールすればいいのか教えてほしいです;

93 :
新しいファイル作りたければ、ファイル->新規作成

94 :
>>93
ありがとうございます
その手順で何回かやってましたが何も起こらずです;
砂時計が少し出てたので何かを読み込もうとしてる感じはありましたが・・・

今からインストールからやり直すのですが
ワークロード、個別のコンポーネントの項目でどれを選べばいいか教えてほしいです
用途はC++の入門書に書いてあるコードを実行です
https://gyazo.com/48057912d8ac21da300faaf6362919e4

95 :
新規作成の空プロジェクト以外は何か出るの?
何も出ないって何かおかしいからイベントログ見てみるとか

96 :
とりあえず
ユニバーサルWindowsプラットフォーム開発
C++によるデスクトップ開発
Visualstudio拡張機能の追加

この3つを選択してインストールしてるんですが他にも選ばなきゃいけないものがあるんでしょうか

97 :
>>95
https://gyazo.com/7cd6a220d3e234cb796a87425c8b1b68
コンソール
デスクトップ

この3つですね
何かダウンロードし忘れてますかね・・・

98 :
プロジェクトからCppを選んだらを選んだら
source.cppの真っ白画面出てきましたがやりかたあってるのかな…?
一応自己解決です

99 :
あー、それのことを言ったつもりなんだがわかりにくかったか
空のプロジェクトはソースコード入ってないから自分で新しく入れろってこと
visual c++ 入門とかでググったら色々出てくると思うが

100 :
入門書のコードなんですが
http://codepad.org/OHOFfttDのコードだと狙い通りに昭和の年数が帰ってくるんですが
http://codepad.org/kq6vlVqaこちらだと思ったとおりに帰ってきません

参照渡しをすると、この問題は解決できるという答えは分かりましたが、サンプルコードの違いが分からないので
どういうときに参照渡しとやらを使えば良いのか分かりません
教えて下さい


100〜のスレッドの続きを読む
C++相談室 part147
文字コード総合スレ Part12
C++でXML(主にxerces)やろう!
2chの荒らし報告の書式対応のプログラム
ARToolKitでARを作ろう
VBSで便利なプログラムを作れスレ 2
VBで作られた有名なアプリって何?
懐かしのMS-DOSプログラミング ver.2
Regular Expression(正規表現) Part14
新言語を開発したい
--------------------
【PS4】Bloodborne ブラッドボーン 聖杯スレPart52
【Robocraft】真夏の夜のRC Part.25
【月10日】大須演芸場・其の5【貸席】
( ^ω^)一人暮らし寂しいお、構ってほしいお266
いないいないばあっ!&おかあさんといっしょ272
【悲報】 シンガポール人 「日本人はシンガポールを占領したことも知らない。歴史教育どうなってるの?」
東京都副知事の猪瀬直樹
Jざつ446
【ミリシタ】アイドルマスター ミリオンライブ! シアターデイズ Part1428
枝野氏「詐欺師は自覚がない」 首相の「悪夢の民主党」国会答弁「ない」発言を批判
ネットで拾った変なGIF画像 その28
【芸能】工藤静香、完璧スタイルの私服コーデに賛否の声「ベルトがボロボロ」
堂本光一と三宅健ウンコスレ
【ローカルール改訂】そろそろID制かIP出そうよ!
NGTで地獄に堕ちて欲しいメンバーいる?
株式会社マークアイ
高田馬場ゲーセンミカドのゲーセン事情
武壇2ちゃんねる分壇17
【AKB48卒業生】庄司なぎさちゃん応援スレ★1【ハープスター】
プロジェクト・ランウェイ65
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼