ezoeryou / cpp-book Goto Github PK
View Code? Open in Web Editor NEWC++11 textbook
Home Page: http://cpplover.blogspot.jp/
License: Other
C++11 textbook
Home Page: http://cpplover.blogspot.jp/
License: Other
よく分からずに初めてプシュしましたらエラーで送れませんでした。自分の試験ページには送れた様なのですが。
(間違えて「Closed」ボタンを押しました。)ごめんなさい。切り貼りします。
セミコロンと引数の追加です。
@@ -5849,7 +5849,7 @@ int main()
[] {
int x = 0 ;
++x ;
}
};
f() ;
auto g = []
@@ -6381,10 +6381,10 @@ h = f ;
void (*ptr1)(void) = []{} ; -auto (*ptr2)(int, int, int) -> int = [](int a, int b, int c) -> int { return a + b + c ; } +auto (*ptr2)(int, int, int) -> int = [](int a, int b, int c) -> int { return a + b + c ; }; // 蜻シ縺ウ蜃コ縺吶� -ptr1() ; ptr2() ; +ptr1() ; ptr2(1, 2, 3) ;
構文としては、sizeof 式
とsizeof (形名)
は区別され、前者は括弧が必須ではありません。
N3337 p104 "5.3 Unary expresssions"では
sizeof unary-expression
sizeof ( type-id )
sizeof ... ( identifier )
8.5.6 リファレンス(References)
struct Base { } ; struct Derived : Base { } ; int main() { int object ; int & r1 = object ; Base base ; Base & r2 = base ; // 派生クラスのlvalueでも初期化できる Derived derived ; Base & r3 = derived ; 【18784行】 - int const const_object ; + int const const_object = 0 ; // OK int const & r5 = const_object ; int const volatile & r6 = const_object; }
・ページ番号が欲しい。
・・理由1:ブラウザの幅を変えると、読んでいる位置が変わって分からなくなる。(巨大な1ページ物だから)
・・理由2:ページ番号を控えておいて後日続きを読むため。その他。
(出来れば「しおり」機能が有ればよいのだけど)
1つ
、1つ
、一つ
など(左から半角、全角、漢数字)
いずれも使われているので統一したほうが好いのではないかという提案。
あるいは一つでなければならない
、1つ目
のように使い分けるなど。
lvalueとrvalue(Lvalues and rvalues)
に、文章が途中で切れているパラグラフがあります。
<p>
ただし、C++では、constなlvalueリファレンスで、rvalueを束縛できるという
</p>
<pre>
int f() { return 0 ; }
int main()
{
int const & lvalue_ref = f() ; // OK
}
</pre>
8.2 曖昧解決(Ambiguity resolution)
略
S y( static_cast(d) ); // S型の変数yの宣言 ← かな?
S z = int(d); // S型の変数zの宣言
}
---------<別件で私の意見>--------
2.7 キーワード(Keywords) 項目で、
キーワードをアルファベット順に並べてほしい。(実は並べてあるが)
一見ランダムに並べてあるようにみえる。(TAB位置に揃えるとか、表にするとか)
初心者の目次は、キーワードからだと思う。
できればキーワードの説明位置にリンクして欲しい。
私のC言語辞典は手垢がいっぱい付いている。
(欲を言うと、本の最後に用語の索引が有るといいな)
コードを打ち込んだらエラーにならない所がある。
3ヶ所。
難しくなって、内容をまだ理解していない。
10.3 virtual関数(Virtual functions)
struct Base { } ; // 基本クラス struct Derived : Base { } ; // 派生クラス struct Other { } ; // BaseやDerivedとは派生関係にないクラス // クラスが同じ struct B { virtual Base & f() ; } ; struct D : B { virtual Base & f() ; } ; // B::fのクラスはD::fのクラスの基本クラス struct B1 { virtual Base & f() ; } ; struct D1 : B { virtual Derived & f() ; } ; // エラー 【21972行】 エラーにならない struct B2 { virtual Derived & f() ; } ; ←正常 struct D2 : B { virtual Base & f() ; } ; ←正常 // エラー struct B3 { virtual Base & f() ; } ; ←正常 struct D3 : B { virtual Other & f() ; } ; ←これのみエラーに成る?
正:int
誤:void
9.8.2 staticデータメンバー(Static data members)
struct S { static int member ; } ; // クラス名 :: メンバー名 【24273行】 -void S::member = 0 ; +int S::member = 0 ;
8.3.1 ポインター(Pointers) void func( void ) { } // 型はvoid (void) void g() { void (*ptr_func)( void ) = &func ; ref_func() ; // 関数呼び出し ←もしかしてptr_func()? int array[5] ; // 型はint [5] int (*ptr_array)[5] = &array ; }
1.5 C++オブジェクトモデル(The C++ object model)
のサンプルコードでコンパイルエラーになる
// int型のオブジェクト
int x ;
int & pointer = new int ;
半ば質問ですが。
2.6 識別子(Identifiers)
で実装依存の文字として
int 変数;
とサンプルコードにありますが、プリプロセスでUCNに変換されるため"変数"と言う文字が識別子に使えるかはソースコードのエンコーディングにUTF-8等を認めているかどうかの問題のはずです。
規格書を読むと実装依存の文字とは$や@等を指しているとも解釈出来ます。
大体のC++コンパイラでは$が識別子に使えるようですし。
int
とするのが正しいのではないかと思うのですがどうなんでしょうか?
static が不要か
8.5.4 アグリゲート(Aggregates)
struct S { int x ; static int static_data_member ; // staticデータメンバー int y ; int : 8 ; // 無名ビットフィールド int z ; } ; 【18460行】 - static int S::static_data_member ; + int S::static_data_member ; S s = { 1, 2, 3 } ; // s.x = 1, s.y = 2, s.z = 3
この例では、static_data_memberと、yとzとの間にある無名ビットフィールドは、リスト初期化の際には、メンバーとして考慮されない。
virt指定子とは、virtual指定子の略語または略称なのか?
【25495行】
【25499行】
誤変換2ヶ所。(”関節”で検索)
正:間接
誤:関節
【21268行】と【21288行】
---------- 8.3.5 関数(Functions) template < typename T1, typename T2 > ??? multiply( T1 t1, T2 t2 ) { return t1 * t2 ; (←参考) } ---------- ここで、???という部分で、戻り値の型を指定したい。ところが、T1とT2に対して operator +を適用した結果の型は、テンプレートをインスタンス化するまで分からない。 ←誤:'+'、正:'*'
{ } の記入漏れ4ヶ所。
12.6.1 明示的な初期化(Explicit initialization)
【24990 行】
struct X { - X( int ) ; + X( int ) { } - X( int, int ) ; + X( int, int ) { } - X( int, int, int ) ; + X( int, int, int ) { } } ; int main() { X x1( 1 ) ; // X::X(int) X x2( 1, 2 ) ; // X::X(int,int) X x3( 1, 2, 3 ) ; // X::X(int,int,int) }
詳しくは、初期化子の直接初期化を参照。
また、=(イコール)記号に続いて値を指定することで、初期化することもできる。
struct X { - X( int ) ; + X( int ) { } } ; int main() { X x = 0 ; // X::X(int) }
末尾に句点(。)がない文を探している時に疑問に思ったこと。
基本的にp
要素内の文章末尾には句点をつけているのに対して、
<ul>
<li>
<p>
文1。文2
</p>
<p>
文3
</p>
...
</li>
</ul>
このようにリストの一部になっている場合、末尾にはつけていなかったので全体を通してそうなのだろうと思っていたところ、後半になるにつれ徐々に、ついていたりいなかったり…
また、リスト内でない時も末尾が場合
(漢字で終わるときか?)で終わるとき統一されていないようです。
どちらが好ましいのか指針を示していただきたく。
【変数名の重複: m2 と m3】
8.5.4 アグリゲート(Aggregates)
struct SubAggregate { } ; struct Aggregate { int m1 ; SubAggregate s1 ; int m2 ; 【18542行】 - SubAggregate m2 ; + SubAggregate s2 ; int m3 ; - SubAggregate m3 ; + SubAggregate s3 ; } ; SubAggregate s ; Aggregate a = { 1, { },// 空の初期化リスト 2, s,// オブジェクトの変数 3, SubAggregate() // 関数形式のキャスト } ;
8.3.5 関数(Functions)の最後
// OK、ポインター auto f() -> void (*)(void); auto f() -> int (*)[5] ←int(&)[5]; // OK、リファレンス auto f() -> void (&)(void); auto f() -> int (&)[5] ←int(&)[5];
【14496行】
class C {
public: //←必要か?
int value ;
} ;
C c ;
// decltype(c)の型は、class C
decltype(c) t2 ;
// decltype(c.value)の型は、int
decltype(c.value) t3 ; //←エラーが出る
publicの説明ではないのでどうでもよいのかもしれない。間違えたことだったらごめんなさい。
初投稿です。不備が有ったらごめんなさい。
8.5.3 値初期化(value-initialize)
初期化の文法と方法
struct S { 【17951行】 - S() : x(1) { } ←ゼロ初期化 + S() : x(0) { } int x ; } ; S s ; // staticストレージの期間を持つオブジェクト
ここでは、Sのデフォルトコンストラクターが実行される前に、データメンバーのxはゼロ初期化されている。
【解説該当箇所:xはゼロ初期化】
gh-pages を使用すればブラウザから直接HTMLをレンダリングすることができるのですが、いかがでしょうか。
gh-pages を使用するとこのようにアクセする事ができます。
---------- 8.3.2 リファレンス(References) void f( int obj ) { int const & a = obj ; // OK、int constへのリファレンス //■ Visual Studio12 で「warning C4227: 旧形式が使用されています : 参照の修飾子は無視されます。」 警告となる。 int & const b = obj ; // エラー、リファレンスへのCV修飾はできない } ---------- ---------- 8.3.2 リファレンス(References) void f() { int * ptr = nullptr ; //■ Visual Studio12 ではエラーにならない。 int & ref = *ptr ; // エラー、nullポインターを参照している } ----------
「ラムダ式の基本的な使い方」で記載されている以下のサンプルについて。
エラーで記載されている例は OK ではないでしょうか。
"return x ;"は lvalue から rvalue への型変換が適用されて戻り値の型はint?
試してみたらコンパイルは通るようです。
// エラー、戻り値の型はvoidだが、値を返している [] { int x = 0 ; return x ; }() ; // OK、戻り値の型を、明示的に指定している。 [] -> int { int x = 0 ; return x ; }() ;
複合代入演算子の説明に「opには、任意の複合代入演算子が入る。」とあるのですが、「op=」が複合代入演算子なのでちょっと説明がおかしい気がします。
「op」を示す言葉が思い浮かばないのですが…
<p>
アクセス指定子によりクラスのデフォルトコンストラクターからは利用できない場合の例
</p>
<p>
コンストラクターに関数tryブロックを使う例:
</p>
これに関しても基準があると好いです。
8.3.5 関数(Functions)において、
識別子 ( 仮引数リスト ) CV修飾子opt リファレンス修飾子opt 例外指定opt
と記載されていますが、正しくは下記ではないでしょうか?
指定子 識別子 ( 仮引数リスト ) CV修飾子opt リファレンス修飾子opt 例外指定opt
n3337では、In a declaration T D where D has the form
と前置きして、Dについて記載されてます。
そのDの部分だけを記載されているようです。
古いものへコメントしてすいません。
【グローバル空間ではエラーになる new int()】
8.5.3 値初期化(value-initialize)
空の()を書く事ができる初期化子には、5.5.3 関数形式のキャスト、5.6.4 new、12.6.2 メンバー初期化がある。
// 関数形式のキャスト int x = int() ; // new 【18122行】 - new int() ; + new int() ; // グローバル空間ではエラーになる ← // メンバー初期化 class C { int member ; C() : member() { } } ;
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.