gpt4 book ai didi

c++ - 通用引用忽略顶级简历限定符

转载 作者:行者123 更新时间:2023-11-30 01:58:24 25 4
gpt4 key购买 nike

谁能告诉我为什么 univeral references 失去了顶级 cv 的资格?我预计在以下代码中第二次和第三次函数调用时,输出会为 const 返回 true。

#include <iostream>
#include <type_traits>

using namespace std;

template<class T>
void print(T const &value){
cout << "Printing from const & method: " << value << endl;
}

template<class T>
void print(T const *value){
cout << "Printing from const * method: " << *value << endl;
}

template<class T>
void f(T&& item){
cout << "T is const: " << boolalpha << is_const<decltype(item)>::value << endl;

print(std::forward<T>(item));
}


int main(){

f(5);

const int a = 5;
f(a);

const int * const ptr = &a;

f(ptr);

return 0;
}

输出:

T is const: false
Printing from const & method: 5
T is const: false
Printing from const & method: 5
T is const: false
Printing from const * method: 5

最佳答案

正如 R. Martinho 指出的那样,引用没有顶级常量。

要检查较低级别的 const-ness,您可以使用 std::remove_reference :

cout << "T is const: " << boolalpha
<< is_const<typename remove_reference<decltype(item)>::type>::value
<< endl;

关于c++ - 通用引用忽略顶级简历限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17472515/

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