Skip to content

关于本章

本章对C++的type specifier进行说明,目前C++中有两个type specifier;

本章采用的在C++\Language-reference\Basic-concept\index.md#Extend to OOP中总结的思路:

首先描述Non-OOP,然后描述OOP

const and non-const

const -> non const是危险的,丢失了CV,可能导致undefined behavior; non-const -> const是正常的,不存在问题;

下面是一个典型non-const->const的例子:

#include <iostream>

void func(const void* input)
{
    const int* i = reinterpret_cast<const int*>(input); // 保持CV
    std::cout << *i << std::endl;
}
int main()
{
    const int i = 0;
    func(&i);
}
// g++ test.cpp
#include <iostream>

int main()
{
    int i = 3;                 // i is not declared const
    const int& rci = i;
    const_cast<int&>(rci) = 4; // OK: modifies i
    std::cout << "i = " << i << '\n';
}
// g++ test.cpp

C and C++

C++的CV比C要严格。