C11关键字&字面值改善

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 {};
};

转载于:https://www.cnblogs.com/ChinaHook/p/7788945.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值