タグ: 罠

IE11 CSS をローカルで読めない超謎挙動

IE に色々とクセのある挙動が多いのはよく知られていますが、作成したウェブページをネットではなくローカルでチェックしている時に謎すぎる挙動に遭遇したのでメモしておきます。ググると IE11 ではオンライン/オフライン問わず様々なケースで外部CSSが読まれなくなる症例があるようで、“キャッシュクリア”、“DOCTYPEを修正”、“互換性オプションを変更” などの対処法が見つかりましたが、いずれの方法も当方の問題の解決に至らず、理由不明なまま対処療法にて解決しましたので一応それも書いておきます。もし明確な理由と対処法をご存知の方がいらっしゃいましたら是非コメントいただけますと幸いです。

– 現象を発生させる手順 –

  1. サーバーに上げてある構築済みサイトの html をブラウザの保存操作で保存する。
    ※保存する時のブラウザは IE11 でなくても FF や Chrome でDLしても発生する
  2. ローカルにある動作する構築済みサイトの該当 html をダウンロードしてきたものに置き換える。
  3. すると何故か html 内で link タグ href で呼び出している CSS が読み込まれなくなる時がある。
    問題はIE11のみで FF や Chrome で開けば動作する。

C++11| コピー初期化(A a = A()みたいなやつ)の罠

例えば次のようなシンプルなクラスを考えます。

    class A {
      public:
          A() {}  // デフォルトコンストラクタ
    };
    // インスタンス化
    A a = A();

この時、どのメソッドがどのように呼びだされるのか実際の動作をトレースしてみます。

コード上に記述されていませんが C++ では暗黙に自動生成されるメンバ関数があることに留意する必要があります。上のコードではコピーコンストラクタと代入演算子、それに C++11 以降であればムーブコンストラクタとムーブ代入演算子が暗黙に宣言されます。

さて、インスタンス化の行:

A a = A();

は”=”の記号で代入するかのような表記ですけども、文法上はコピーコンストラクタによる初期化文の形式のひとつになります。