Questions tagged [c++]

C++(シープラスプラス)は、C 言語の拡張として定義されたマルチパラダイムの汎用プログラミング言語です。日本では略してシープラプラ、シープラなどとも呼ばれます。

C++(シープラスプラス)は、汎用プログラミング言語の一つである。日本では略してシープラプラ、シープラなどとも呼ばれる。

C言語を拡張してオブジェクト指向プログラミングを実現しようとしたことが始まりである。現在では、ジェネリックプログラミングなど様々なプログラミングパラダイムを適用できるマルチパラダイムなプログラミング言語となっている。

当初はC言語のスーパーセットだったが、現在は細かい非互換部分が増えている。

オンラインコンパイラ

ウェブブラウザ上で、ソースコードを書いて、コンパイル・実行結果を確認できるウェブサービス。質問・回答の際に便利。

例:
- Wandbox
- Ideone.com

バージョン

ISOで標準規格(ISO/IEC 14882)が制定されてからは、他のISO規格の言語と同様に、規格が制定・改訂された年で呼び習わされる。

  • C++98
  • C++03: C++98の小改訂
  • C++11 (): 大規模な改訂
  • C++14 ():: C++11の小改訂

主な処理系

ここにないものにタグを使っても問題ない。

  • GCC: g++コマンド
  • Clang: clang++コマンド
    • Apple LLVMコンパイラ
  • Visual C++
  • Intel C++ Compiler

ここでは入門に関する書籍について説明します。

C入門

環境が見当たらずインストールに不安がある場合
やさしいC 第4版
http://www.amazon.co.jp/dp/479737098X

世界でいちばん簡単なC言語のe本―C言語の基本と考え方がわかる本
http://www.amazon.co.jp/dp/4798028843

かんたんC言語 (プログラミングの教科書)
http://www.amazon.co.jp/dp/4774142328

C初級

以下、環境やインストールについては触れない

全くCに触れたことがない場合
新版 明解C言語 入門編
http://www.amazon.co.jp/dp/4797327928

標準ライブラリまで網羅したい場合
独習C 第4版
http://www.amazon.co.jp/dp/4798115770

入門の時点でポインタについて詳しい説明が必要な場合
苦しんで覚えるC言語
http://www.amazon.co.jp/dp/4798030147

C中級、C++初級

コードの書き方に不安がある場合
C実践プログラミング 第3版
http://www.amazon.co.jp/dp/4900900648

文字列の扱いに慣れたい場合
新版 明解C言語 中級編
http://www.amazon.co.jp/dp/4797350040

ポインタをマスターしたい場合
C言語ポインタ完全制覇
http://www.amazon.co.jp/dp/4774111422

ソースファイルを分割できるようになりたい場合
新版 明解C言語 実践編
http://www.amazon.co.jp/dp/4797329955

規格に沿った学習がしたい場合
プログラミング言語C 第2版 ANSI規格準拠
http://www.amazon.co.jp/dp/4320026926

C++への入門がしたい場合
ロベールのC++入門講座
http://www.amazon.co.jp/dp/4839926050

独習C++ 第4版
http://www.amazon.co.jp/dp/4798119768

C上級、C++中級

その他の言語を呼び出したい場合
C言語教科書(上達編) 誰でもわかる! C言語ベテラン技
http://www.amazon.co.jp/dp/4822284212

協調性のあるコードを書きたい場合
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
http://www.amazon.co.jp/dp/4873115655

より高度なテクニック、ノウハウを得たい場合
Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)
http://www.amazon.co.jp/dp/4621066099

STLの利用法をマスターしたい場合
STL標準講座―標準テンプレートライブラリを利用したC++プログラミング (Programmer’s SELECTION)
http://www.amazon.co.jp/dp/4881357786

STLよりも一歩踏み込んだライブラリが使用したい場合
Boost C++ Librariesプログラミング
http://www.amazon.co.jp/dp/4798017043

C++上級

(どのような書籍が良いのか思いつきませんが、オープンソースのライブラリの利用やUnity関連書籍でもいいのか考えています。)

C入門、C初級から1冊、
C中級、C++初級は苦手克服として1~3冊、
C上級、C++中級、C++上級から時間と予算、目的に合わせてと考えています。

921 questions
14
votes
2 answers

delete[] a; どうしてdelete[]←ここに値がないのに配列を廃棄できるのですか

int *a =new int[10]; ここでは数字が必要ですが delete[] a; どうしてここでは数字が必要ないのですか
user10945
  • 615
  • 2
  • 7
  • 28
12
votes
3 answers

constなオブジェクトへのポインタをdeleteしたときの挙動

以下のコードはコンパイルし,動作します.(Wandboxのg++ 4.9.2,clang 3.5.0にて確認,以下同じ) #include int main(){ auto p = new int const(0); delete p; } しかし,delete p;を::operator delete(p);で置き換えた場合にはコンパイルエラーが発生してしまいます.(g++での例,clangでもコンパイルエラー) prog.cc: In function…
pandaman
  • 377
  • 1
  • 3
  • 10
11
votes
6 answers

プログラムで確保されるメモリについて

プログラムで確保されるメモリ領域には、スタック領域とヒープ領域があると思います。 スタック領域は関数内などで定義される変数によって確保される領域で、 コンパイルをした時点でメモリの大きさが決まり、確保や解放もOS任せになります。 それに対してヒープ領域は動的確保(mallocとかnew)で確保される領域のことで、 プログラマが解放しない限りそこに残り続けます。 ここで質問なのですが、(上の解釈が間違っている時はご指摘ください) 例えば以下のコード(C++)があったとします。 void…
Atori
  • 189
  • 1
  • 2
  • 11
9
votes
2 answers

複数あるキャスト記法をどのように使い分ければいいか教えてください

c++で複数あるキャストの違いを教えてください。 どちらも使える場合はどちらを選べばいいかわかまりません。 static_cast(x); // 静的キャスト(静的な普通の型変換を行うキャスト) (const char*)x; // キャスト的記法 () const char*(x); // 関数的記法
user28203
9
votes
4 answers

bitの初期化は「0代入」と「^(XOR)演算」どちらが速い?

bit演算について色々調べてみると、Wikipediaでこのような文を発見しました。 多くのアーキテクチャでは、ゼロという値をロードしてレジスタに格納するよりもXORを行う方がCPUクロックサイクルを消費せず、また命令長も短いためメモリを節約できる。 同じレジスタを指定したXOR命令を実行して同じレジスタに戻すことでその内容をゼロにすることができる。 例えば、 unsigned int hogeBit; という変数があるものとし、色々bitを弄った後であるとすると、 hogebit =…
krnkrs
  • 259
  • 1
  • 4
  • 13
9
votes
3 answers

グローバル変数は極力使わずにそれを関数のargumentとして与えるべきですか?

次のような状況を想定します。 int a; void plus_a_v1(int& elem) elem += a; int main() { a = foo(); // aはruntimeで決まると仮定。constexprにならない。 int array[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; for(int* ptr=array; ptr != array+10; ++ptr) plus_a_v1(*ptr); return…
10ants
  • 363
  • 4
  • 11
9
votes
2 answers

nothrowのようなそれ自体機能をもたないが、指定することで別の演算子やクラスに振るまいを変更させるためのオブジェクトを一般的になんと言いますが?

タイトルの通りですが、ズバリ、 xxxオブジェクトのxxxを知りたく質問しています。
jsuzu
  • 1,181
  • 10
  • 24
9
votes
2 answers

菱形継承が線形継承より遅い理由は?

プログラミング言語C++ 第4版の「27.4.2 クラス階層の線形化」に、菱形継承は線形継承より遅いというような事が書かれています。  設計の第一歩目では、伝統的な多重継承による“ダイアモンド”型の階層だった: Node <-- Expr <-- Stmt <-- Decl <-- Var ^ ^ ^ ^ ^ …
alpha
  • 1,745
  • 1
  • 12
  • 24
8
votes
2 answers

C++20 コンセプトで、特定の戻り値の型を持つメンバ関数を持つことを要求するにはどのようにすべきですか?

A.f()はintを返していますが、もしコメントアウト部が入っているコードの場合は、boolでなければコンパイルエラーになります。これをコンセプトで要求したい(f()の戻り値をboolであることを要求したい)場合はどのようにすべきでしょうか? #include #include #include struct A{ int f() { return 42; …
misaki
  • 680
  • 6
  • 14
8
votes
2 answers

c++ namespaceの仕様について

下記コードを実行する際、namespace でくくったはずの関数がそのまま使用できてしまうのは namespace の仕様なのでしょうか? namespace Test 内で宣言した Vector2 構造体を使用しているか否かで コンパイル時の成否が変わってしまっています。 AddVector() には Test:: を付けても付けなくてもコンパイルが成功してしまっているのが解せません。 AddVector() 自身を namespace Util{}…
7
votes
2 answers

bool operator==(const T&, const T&)と、クラス内でbool operator==(const T& other) constを定義する違いはなんですか?

以下のコードのように、 メンバにbool operator==(const T&) constを定義する グローバルにbool operator==(const T&, const T&)を定義する この2つの違いは何でしょうか? どちらを使うべきでしょうか? code: #include struct A{ int x; bool operator==(const A& other) const { std::cout <<…
misaki
  • 680
  • 6
  • 14
7
votes
1 answer

可変長テンプレートの展開と引数の評価順序についての疑問。

class my_vector : private std::vector { template void func_1_(std::index_sequence) { int n[] = { 0, (static_cast(push_back(Index)), 0)... }; } template
nnn
  • 185
  • 2
  • 8
6
votes
1 answer

c++、同じ名前の関数でこの場合どっちが使われるのかわからない。

以下のコードなのですがtemplateの方の関数でreturn sunto();とありますがそれはtempalteのほうの関数をまた使ってるのでしょうか。一方template<>のほうはどこで利用されるのでしょうか?template<>関数をコメントにするとint array3のほうでエラーになります。 coutでいつ使われてるか確認しようとしましたがエラーになるので使えませんでした。名前が同じなので混乱しています、解説をお願いしたいです。 template
user28203
6
votes
2 answers

3つの引数をもつ C++ typedef の意味

Boost.Proto Users' Guide を読んでいるのですが、そのなかの typedef typename Context::template eval::result_type…
mito
  • 63
  • 4
5
votes
5 answers

C++でnewした後にrealloc()したポインタをdeleteしても問題ないですか?

表題の通りです。 バッファクラスを作ったのですが、newとreallocの混在に加えて、それをdeleteしています。このようにした場合に解放されない部分が発生したりしないかを確認したいと思っています。 char *p = new char[10]; p = realloc((void*)p, 15); delete p[]; よろしくお願いします。 すいませんdeleteはミスです。修正しました。
0xfffffff7
  • 787
  • 2
  • 12
  • 26
1
2 3
22 23