gpt4 book ai didi

c++ - 与列表初始化语法的自动分配混淆

转载 作者:太空狗 更新时间:2023-10-29 20:40:08 25 4
gpt4 key购买 nike

我现在才能够在工作中第一次使用 C++11,而且我正在边学边学。我读过GotW #94我正在尝试采用他的建议,在声明局部变量时使用 auto 而不是显式声明类型。

鉴于此,我有以下代码:

class foo
{
};

int main()
{
auto f = foo const*{nullptr};
}

我在 main 中的作业无法编译并失败:

main.cpp: In function 'int main()':
main.cpp:13:18: error: expected primary-expression before 'const'
auto f = foo const*{nullptr};
^

我觉得我遗漏了一些明显的东西。我在这里做错了什么?

(我的样本是 on coliru )。

最佳答案

当您使用函数符号进行类型转换时,类型名称必须是simple-type-specifiertypename-specifier(§5.2.3 [expr.type.conv]),这基本上意味着由单个单词组成的类型名称。

unsigned int a = unsigned int(42);

也失败了,并且不涉及类型推断或列表初始化。

在我看来,在您的示例中使用 auto 相当于混淆。只需使用

foo const* f{nullptr};

如果你必须使用auto,创建一个别名

using foo_const_p = foo const*;
auto f = foo_const_p{nullptr};

关于c++ - 与列表初始化语法的自动分配混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25331889/

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