gpt4 book ai didi

c++ - 在偏函数特化中忽略值类型的顶级 const 限定符

转载 作者:行者123 更新时间:2023-11-30 00:55:01 28 4
gpt4 key购买 nike

由于 const int 特化导致以下错误:

#include <iostream>
using std::cout;
using std::endl;

template <typename T> void g(T val)
{
cout << "unknown" << endl;
}

template <> void g(int && val)
{
cout << "int &&" << endl;
}

template <> void g(const int && val)
{
cout << "const int &&" << endl;
}

template <> void g(int & val)
{
cout << "int &" << endl;
}

template <> void g(const int & val)
{
cout << "const int &" << endl;
}

template <> void g(int val)
{
cout << "int" << endl;
}

template <> void g(const int val) //redefinition here
{
cout << "const int" << endl;
}

int main() {}

error: redefinition of 'g'
template <> void g(const int val)
^

为什么 T&T&& 不同于 const T&const T&& 但是 Tconst T 没有区别吗?

最佳答案

因为函数参数的顶级常量性是函数的实现细节。例如,以下是有效的:

// Prototype
void foo(int c);

// Implementation
void foo(int const c) { ... }

由于参数是按值传递的,调用者并不真正关心函数是否要修改它自己的私有(private)拷贝。因此,顶级 const-ness 不是函数签名的一部分。

请注意,这仅适用于顶级常量! intint const 在函数原型(prototype)中是等价的,int *int * const 也是等价的。但是 int *int const * 不是。

关于c++ - 在偏函数特化中忽略值类型的顶级 const 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13162137/

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