And*_* DM 9 c++ initialization auto c++11 type-deduction
我养成了使用直接列表初始化编写代码的习惯,因为它更有效,并且防止隐式缩小非常有用:
int i {0};
string s {""};
char c {'a'};
bool b {false};
auto num {100}; // But this??
Run Code Online (Sandbox Code Playgroud)
但是当谈到自动说明符时,我听说它被认为是坏的或者不喜欢这样写它,为什么呢?
Tar*_*ama 11
以下是使用该语法失败的示例:
struct Foo{};
void eatFoo (const Foo& f){}
int main() {
Foo a;
auto b{a};
eatFoo(b);
}
Run Code Online (Sandbox Code Playgroud)
你可能会认为这很好:b应该是一个Foo并传递给eatFoo.不幸的是,这会导致以下编译器错误:
prog.cpp:11:10: error: invalid initialization of reference of type 'const Foo&' from expression of type 'std::initializer_list<Foo>'
eatFoo(b);
Run Code Online (Sandbox Code Playgroud)
如你所见,b实际上是类型std::initializer_list<Foo>.在这种情况下,当然不是我们想要的.如果我们改变它auto b = a,这很好.然后,如果我们仍然想要使用auto,但明确说明类型,我们可以将其更改为auto b = Foo{a}并让编译器忽略副本.
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |