gpt4 book ai didi

c++ - auto & x = const int * 是什么类型?

转载 作者:太空狗 更新时间:2023-10-29 19:51:23 26 4
gpt4 key购买 nike

main 函数中,我创建了一个const int 指针变量,并将其赋值给auto& 声明的变量。然后使用 decltype(x) 检查类型。我预计类型是 const int*。但是 is_same 返回 false

int main()
{
int a = 10;
const int * cp_val= &a;
auto& x = cp_val;
bool is_const_int_ptr = std::is_same<decltype(x), const int *>::value; // returns 0

// *x = 100; // error: assignment of read-only location '* x'
}

但是如果我添加以下辅助函数:

#include <boost/type_index.hpp>

template<typename T>
void print_type(T)
{cout << "type T is: "<< boost::typeindex::type_id_with_cvr<T>().pretty_name()<< '\n';}

主要是调用函数

print_type(x); // It returns int const*

我是否在 std::is_same 中遗漏了什么?

最佳答案

请注意,对于 auto& x,您明确声明了 x 作为引用;那么它的类型应该是 const int *&,即指向 const int 的指针的引用。

这里有一个更好的主意(来自 Effective Modern C++ (Scott Meyers)),可以在编译时从编译错误消息中获取准确的类型。

template <typename>
struct TD;

然后将其用作

TD<decltype(x)> td;

你会得到这样的错误信息

source_file.cpp:15:21: error: implicit instantiation of undefined template 'TD<const int *&>'
TD<decltype(x)> td;
^

LIVE

您的辅助函数按值获取参数;参数的引用性将在类型推导中被忽略,这就是为什么你得到 const int*

关于c++ - auto & x = const int * 是什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46821155/

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