1. 程式人生 > >C11關鍵字&字面值改善

C11關鍵字&字面值改善

不能被繼承 不能 沒有 簡單的 cnblogs 其中 str2 想要 fin

1、原始字面值改善

  原始字面值可以直接表示字符串的實際含義,但是一些特殊字符就需要轉義。

std::string str = "D:\A\B\test.txt";
std::cout << str << std::endl;
//打印結果 D:AB est.txt

  那麽這並不是我們想要的結果,C++中可以通過簡單的方法可以改善這個問題。具體做法就是R"xxx(raw string)XXX",其中原始字符串必須用()括起來,口號的前後可以加其他字符串,所加的字符串是被忽略的,但是字符串必須在括號的前後出現。

//error:括號前面的字符串沒有出現在括號後面
//std::string str = R"a(D:\A\B\test.txt)"; //std::cout << str << std::endl; //error:括號前後的字符串不匹配 //std::string str2 = R"a(D:\A\B\test.txt)b"; //std::cout << str 2<< std::endl; //ok std::string str3 = R"(D:\A\B\test.txt)"; std::cout << str3 << std::endl; //ok std::string str4 = R"
test(D:\nC\\D\test.txt)test"; std::cout << str4 << std::endl; //打印結果 D:\A\B\test.txt D:\nC\\D\test.txt

2、final和override關鍵字

2.1 final關鍵字

  C++11中增加了final關鍵字來限制某個類不能被繼承,或者某個虛函數不能被重寫。

struct A
{
    //ok,foo函數不能被重寫
    virtual void foo() final {};

    //error:非虛函數不能被修飾
    void bar() final{};
};

struct B final: public A { //error:foo不能被重寫 void foo(); }; //error:B不能被繼承 struct C : public B { };

2.2 override關鍵字

  override關鍵字確保在派生類中聲明的重寫函數與基類的虛函數有相同的簽名,同事也明確表示將會重寫基類的虛函數,還可以防止把重寫基類的虛函數聲明成重載。這樣既可以保證重寫虛函數的正確性,又可以提高代碼的可讀性。

struct A
{
    virtual void foo()  {};
};

struct B : public A
{
    //顯式重寫
    void foo() override {};
};

C11關鍵字&字面值改善