C++:如果参数是const,函数返回const,否则不是

问题描述 投票:0回答:2

是否有一种语法可以将以下函数合并为一个,以便如果输入是 const,则结果是 const,如果输入不是 const,则结果也不是 const?

char* f1(char* x) {
    return x+1;
}

const char* f2(const char* x) {
    return x+1;
}

c++ constants polymorphism
2个回答
1
投票

这个

char* f1(char* x) {
    return x+1;
}

const char* f1(const char* x) {   // rename f2->f1
    return x+1;
}

不会使其成为“一个函数”,但它是一组重载,对于用户来说,它实际上是多个函数并不重要,除非他们尝试获取地址。

有很多方法可以避免重复实现,也许最简单的就是根据 const 实现非常量重载:

const char* f1(const char* x) {
    return x+1;
}

char* f1(char* x) {
    return const_cast<char*>(f1(static_cast<const char*>(x)));
}

在第二个重载中

x
指向非常量
char
,因此可以从另一个重载的结果中丢弃常量性。


0
投票

您可以制作如下所示的函数模板:

template<typename T>
auto foo(T *ptr) requires(std::is_same_v<T, char> || std::is_same_v<T, const char>) {
    return ptr+1;
}
© www.soinside.com 2019 - 2024. All rights reserved.