gpt4 book ai didi

c++ - std::is_const 将 const 指针标识为非常量

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:33 25 4
gpt4 key购买 nike

我很困惑std::is_const识别 const 的行为指针为非 const .我自己的实现 is_const做完全一样的事情。我不确定为什么更通用的模板化结构 <T>正在挑选 <const T>版本。 gcc4.7 和 clang3.1-svn 表现出相同的行为。任何人都可以解释发生了什么事吗?代码如下:

#include <iostream>
#include <sstream>
#include <type_traits>

class CEmptyClass {};

namespace jbc
{
template <typename T>
struct is_const : std::false_type {};

template <typename T>
struct is_const<const T> : std::true_type {};
}

int main(int argc, char* argv[])
{
std::cout << "Is 'const CEmptyClass*' constant according to std lib : "
<< std::is_const<const CEmptyClass*>::value << std::endl;
std::cout << "Is 'const CEmptyClass*' constant according to jbc : "
<< jbc::is_const<const CEmptyClass*>::value << std::endl;
}

在这两种情况下 is_const<const CEmptyClass*>::value返回 0

最佳答案

没有const 引用这样的东西,引用永远不是const。像这样的代码无法编译:

int& const i;

现在,如果您要删除您的引用,它就会起作用。如果您要将 const 放在右侧(语义上是同一件事),然后向后读取类型

CEmptyClass const&

它会读取一个 reference const CEmptyClass不是 const CEmptyClass 的引用

更新:既然您更改了对指针的引用,同样的错误构造仍然存在:

const CEmptyClass*
CEmptyClass const*

两者是相同的,一个指向 const CEmptyClass 的非常量指针

CEmptyClass* const

是一个指向 CEmptyClass 的const指针

const CEmptyClass* const
CEmptyClass const* const

是指向 const CEmptyClass 的 const 指针。

关于c++ - std::is_const 将 const 指针标识为非常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10866913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com