c++ - 为什么非常量指针上的 const Ref 被解释为 const 指针?

标签 c++ c++11

为什么 const PointerToNonConst& value 对于下面的代码被理解为 A* const:

using PointerToNonConst = A*; // or typedef A* PointerToNonConst;
const PointerToNonConst& value; // compiled and understood as `A* const`

我原以为它是只读指针而不是常量指针。

顺便说一句,这是一个用例,为什么您可能会在代码中遇到这个问题:

class A
{
public:
    void callOnNonConstMethodIsValid()
    {
        // change the object here
    }
}

std::vector<A*> vect;

for (const auto& elem : vect)
{
    elem->callOnNonConstMethodIsValid(); // no error
}

最佳答案

typedefusing 不像#define。它不是文本替换。当您使用 typedefusing 创建类型别名时,该名称将被视为一个单元。当您将 const 应用于它时,它会将类型作为一个整体应用于顶层。您不能将它应用于该类型的内部组件。

关于c++ - 为什么非常量指针上的 const Ref 被解释为 const 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34892798/

相关文章:

c++ - 如何使用 C++11 <atomic> 实现指向整数的指针的原子增量?

c++ - 带有自定义键编译器错误的 unordered_map

c++ - clang 3.8 make 文件失败

c++ - 可以基于范围的 C++11 执行/检查额外的操作/条件吗?

c++ - 解析 mmap()-ed 文件

c++ - 何时使用 vector 而不是数组?

c++ - Visual Studio Code C++ 单元测试是否覆盖?

c++ - 将函数实现为自由函数而不是 C++ 中的成员有什么优势吗?

c++ - 为什么这个包装分配器的构造函数在模板替换期间采用了错误的类型(完美转发构造函数)?

c++ - 在C++中,是否有可能在父类(super class)中有一个方法,当每个子类调用该方法时,该方法会向该子类返回一个shared_ptr?