Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检查是否有常量类型_C++_Templates_Type Deduction - Fatal编程技术网

C++ 检查是否有常量类型

C++ 检查是否有常量类型,c++,templates,type-deduction,C++,Templates,Type Deduction,我有以下c++11代码: #include <iostream> #include <type_traits> template<typename T> void overload(T&& t); template<> void overload<char&>(char& t) { std::cout << "char& called" << std::endl; } t

我有以下c++11代码:

#include <iostream>
#include <type_traits>

template<typename T> void overload(T&& t);
template<> void overload<char&>(char& t) { std::cout << "char& called" << std::endl; }
template<> void overload<const char&>(const char& t) { std::cout << "const char& called" << std::endl; }

int main() {

    std::cout << "const char: " << ((std::is_const<const char>::value)?"const":"non-const") << std::endl;
    std::cout << "const char&: " << ((std::is_const<const char&>::value)?"const":"non-const") << std::endl;

    const char c = 'c';
    overload(c);

    return 0;
}
我想知道为什么对std::is_const的第二次调用没有看到常量,而对重载的调用却看到了常量

有什么想法吗

这个问题与这个问题高度相关:
但还是有点不同。

你似乎混淆了常数的级别

is_const正确地报告该类型缺少顶级常量(
const char&const
如果合法,则为true)

您的重载与常量左至&上的正确函数相匹配


用指针、
char*
const char*
char*const
const char*const
尝试同样的方法,以便更好地查看级别。

关于顶级const的内容已在注释和其他答案中说明。如何获得您可能希望看到的内容:使用
std::remove\u reference

std::is_const<std::remove_reference<const char&>::type>::value
std::is_const::value

谢谢!这就是我需要的提示。还要感谢其他评论。
std::is_const<std::remove_reference<const char&>::type>::value