我现在才能够在工作中第一次使用 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-specifier 或typename-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/