c++ - C++ 编译器如何检测非常量函数体?

标签 c++ compilation compiler-construction

偶然发现了以下代码:

class Person
{
private:
    char name[10];
public:
    // this won't compile:
    char* getName_1() const {
        return name;
    }
    // this will: 
    const char* getName_2() const {
        return name;
    }
};

我想知道编译器究竟如何判断 getName_1() 不是 const 函数。因为函数体内并没有真正修改成员变量的代码。

最佳答案

由于 getName_1 被标记为 const,因此该类的所有字段都被视为 const。

所以getName_1name的类型是const char[10]

这不能隐式转换为char *(返回类型),因此编译器报错。

关于c++ - C++ 编译器如何检测非常量函数体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57149038/

相关文章:

c++ - 为什么 SFML 加载白色方 block 而不是纹理?

C++:在 Visual Studio 中处理每个可变参数

c - 是否可以通过向 gcc 传递参数来声明弱函数?

c# - MSBUILD 如何调用 CSC.exe?

c++ - 什么是 Win32 消息编码?

c++ - 简单程序在并行化后不工作

ruby - 无法安装rmagick

c - 什么范围的机器的二进制兼容性?

c++ - 允许编译器优化异常抛出吗?

c - 在 OSX 上使用 clang 时,什么控制自动添加的命令行选项?