gpt4 book ai didi

c++ - 模板函数和 const 限定符中的类型推导

转载 作者:太空宇宙 更新时间:2023-11-04 14:05:10 32 4
gpt4 key购买 nike

我有以下一段 C++11 代码:

#include <iostream>

struct object {
void talk(const char* text) const { std::cout << "talk " << text << std::endl; }
};

void makeItTalk(object& obj) { obj.talk("non-const"); }
void makeItTalk(const object& obj) { obj.talk("const"); }

template<typename P> void f(P&& p) {
makeItTalk(std::forward<P>(p));
}


int main() {

const object obj;
f(obj);

return 0;
}

运行时我得到了 talk const 这应该是什么,但我想知道它是如何工作的。从我目前所读的内容来看,const-qualifier 在模板推导中被忽略了。由于 objconst object& 类型,并且我们有一个 P&& 作为 f 中的参数,我希望模板参数解析为 object& 并且由于 & && = & 函数 f 应该变为

void f(object& p) { makeItTalk(std::forward<object&>(p)); }

但是这个函数甚至不允许为obj调用。所以我想知道我说 const 被忽略是不是错了?

最佳答案

据我了解,当函数模板采用指针或引用参数时,类型推导不会忽略 const 限定符。顶级常量被删除,但指向或引用的内容的常量没有被删除。

可以在这里找到更广泛的论点:http://cpp-next.com/archive/2011/04/appearing-and-disappearing-consts-in-c/

关于c++ - 模板函数和 const 限定符中的类型推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17340840/

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