adminC++のテンプレート関係は難しくて、もともとのC++との整合性もあって複雑になっている。std::decayは配列とポインタの関係を扱ってテンプレートをより汎用的にするためのもの。a;コピーできると言ってもポインタにアドレスをコピーしているだけ。前提知識:関数もコピーできない配列と同様に関数もコピーできないけど、関数へのポインタならコピーできる。f1;}std::decayこんな事があるので、テンプレートで型を汎用的に扱おうとすると一部の型でできなくなることがある。このできなくなる型の場合にできる型に変換してくれるのがstd::decay。tf("aaa");tf2(1);tf2("aaa");}“aaa”というリテラル文字列は型としてchar[4]なのでそのままだと初期化できない。そこでdecayを使ってこれをポインタ型に変えるとコピーできる。tg(f1);tg2(f1);}生関数のままの型だとコピーできないのでエラーになるけどdecayを使って関数へのポインタに変換すればコピーできる。adminC++プログラマやJavaプログラマにとってJavaScriptの分かりづらいところを解説。スコープC++では{と}で括ったブロックがスコープになるがJavaScriptではスコープにならない。202つのaは同じaになる。10上のコードでfunction内のvarを外すと同じaを参照する。20コンパイルと実行JavaScriptの実行は2段階で行われる。最初は変数を割り当て、次に実行する。割当時にはどのスコープにどの変数があるかを確定する。varによる変数の宣言や変数への書き込みは割当であり、変数の読み込みは割当処理ではスルーされる。defined@Scratchpad/1:4:1*/上記のコードではa,b,cは割当時に割り当てられるが、dは割り当てられないので実行時にエラーになる。cは書き込み処理なので割当時に割り当てられる。strict"(ダブルクオーテーション含む)と記述する。オブジェクトと辞書オブジェクトと辞書は同じ。functionObjectは実際は関数である(後述)。関数とオブジェクトJavaScriptにはクラスがない。クラスのようなものをつくりたいときは関数で行う。objectnewを使うと、空のオブジェクトをつくりそれを暗黙の引数として渡す。関数内ではthisとして参照しそのオブジェクトを返す。thisC++と同じようにオブジェクトのメンバ関数をコールすると暗黙の引数thisが渡される。555getaやsetaではthisを参照しているので関数を呼び出したオブジェクトがthisになりその値が変わる。getcやsetcではthisを参照していないのでオブジェクトは変更されない。そもそもこのcはオブジェクトに含まれてはおらず関数funcが持っている変数である。getcやsetcはそのcを参照するがstaticでもなく、newでオブジェクトがつくられるごとにつくられそれが参照されている。よってcはオブジェクトがもつprivate変数のように扱える。ここでnewを使わずにfuncをコールするとthisはWindowオブジェクトになる。このオブジェクトは実行環境で変わり、ブラウザ上ではWindowオブジェクトになる。グローバルに宣言された変数はこのWindowオブジェクトのプロパティになっている。10prototypeと__proto__関数はprototypeメンバとしてObjectをもつ。この関数でnewしてつくられたオブジェクトは__proto__メンバをもち同じObjectをもつ。trueオブジェクトのプロパティを参照するとき、そのプロパティが見つからなかった場合は、__proto__から探す。よって関数のprototypeにあるプロパティを持たしておくと、オブジェクトで共通のプロパティを持つことができる。Hello!!prototype自体もオブジェクトでObjectは関数なのでprototypeも__proto__をもつ。よってあるプロパティを参照してそれが見つからないとき__proto__から見つけようとするがそれもないときは__proto__.__proto__から見つけようとする。よってObject.prototypeにプロパティを設定しておくとすべてのオブジェクトで共通のプロパティを持つことができる。myRootFunc!!Object.prototypeの__proto__はnullになっているので無限ループにはならない。adminsvchostとはsvchost.exeはサービスを提供する実行ファイル、サービスとはユーザがサインインしていなくてもバックグラウンドで動いているプロセス。1703)からサービス1つにつき1プロセスで起動(分割サービス)するようにしたため多くのサービスがタスクマネージャなどに表示される。これは常に行われるわけではなくメモリのサイズが3.5Gより大きければ分割サービスになる。3.5G以下の場合は以前のWindowsのようにサービスがグループ化される。グループ化といってもすべてのサービスが1つのプロセスで実行されるわけではなくある程度は分けられる。分割サービスによりいくつかの利点がある。プロセスで分けられているため1つのサービスに不具合があってもだのサービスに影響しない。特権などはプロセスごとに持つため設定しやすくなる。CPUの使用率を制限するときもプロセス単位なのでやりやすくなるただし、プロセスをたくさん起動するとメモリ効率は悪くなるので、ここでは分割サービスになっているシステムをグループ化に戻す方法を紹介する。processes8Gでサービスをプロセスに分けるように設定レジストリキー:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SvcHostSplitThresholdInKBの値を8Gで設定する。実際の値はキロバイトなので、8388608になる。splitted.再起動すると反映される。groupedサービスがグループ化されてsvnchost.exeの数が減った。Explorerでできる。svchost.exeをダブルクリックしてから’Services’タブを表示すると以下のようにサービスの一覧が表示される。chromeがversion69になるとタブの形が変わって以下のようになる。元に戻すオムニボックス(アドレスバー)に以下を入力。chromeをNormalに変える。変更後Chromeを再起動すると元に戻る。admin以下のソースはある機能が利用可能かの状態を返す。一度だけ初期化するのでstaticとラムダ関数で行っている。isAvailable;}最初に呼ばれたときはラムダ関数を実行し、次からはstatic変数の値を返す。ラムダ式ラムダ式の戻り値はreturnから自動で推論される。この場合はboolになる。スレッドC++11でstatic変数のスレッドセーフが保証されたので、上記ラムダ式が2度動くことはない。Creatorでソースコードのパスを設定する設定するパスは{QtInstallDir}\Qt\5.11.0\Srcになる。Creatorでデバッグしてステップ・インするこれでQtのソースコードにステップ・インすることができる。Qtのソースコードにブレークポイントを設定することもできる。