gpt4 book ai didi

c++ - 为什么在某些情况下 cv 限定符会从函数返回类型中删除?

转载 作者:行者123 更新时间:2023-12-02 07:54:30 27 4
gpt4 key购买 nike

看这个简单的例子:

template <typename T>
const T const_create() {
return T();
}

struct Foo { };

int main() {
auto &x = const_create<Foo>(); // compiles
// auto &x = const_create<int>(); // doesn't compile
}

为什么带有Foo的版本编译,但带有 int不是吗?换句话说,为什么 constconst_create<int> 的返回类型中删除?它的工作原理就像它返回 int ,不是const int 。这不是语言上的不一致吗?

标准在哪里强制要求这种行为?

最佳答案

[expr]/6说:

If a prvalue initially has the type “cv T”, where T is a cv-unqualified non-class, non-array type, the type of the expression is adjusted to T prior to any further analysis.

因此,const Foo 纯右值只是 const Foo,但 const int 纯右值被调整为 int .

<小时/>

此规则是由 N3337 [basic.lval]/4 在 C++14 中引入的(将 N4140 [expr]/6CWG 1261 进行比较)。 .

关于c++ - 为什么在某些情况下 cv 限定符会从函数返回类型中删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58154663/

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