foo=bar和foo{bar}之间的差异
Difference between foo = bar and foo{ bar }
我的印象是foo = bar
和foo{ bar }
都做了相同的事情,这只是偏好的问题,但在我的代码中,foo = bar
给出了一个错误,但foo{ bar }
没有:
std::vector<std::unique_ptr<bar>> bars;
bar& myFunction() {
bar* b = new bar();
std::unique_ptr<bar> foo{ b }; //works fine
std::unique_ptr<bar> foo = b; //error
bars.emplace_back(std::move(foo));
return *b;
}
知道为什么会发生这种事吗?
第二个不起作用,因为unique_ptr
有一个显式构造函数:
explicit unique_ptr( pointer p ) noexcept;
下一行:
std::unique_ptr<bar> foo = b;
尝试调用上述CCD_ 6的构造函数。由于explicit
关键字的原因,对构造函数的调用是无效的。
所以只有这两个会起作用:
std::unique_ptr<bar> foo { b };
std::unique_ptr<bar> foo ( b ); // or this
相关文章:
- ld: foo.o:foo.h:6 'bar' 的多重定义 foo.h:6: 首先在这里定义
- C++ "var foo = !!::bar()"语法?
- What does int foo = bar << ' '; mean in c++?
- 在"bar::foo"的定义中使用"foo"
- 为什么 foo(short int *) 和 bar(signed short *) 认为 QT 的签名不同
- 为什么我需要双括号在构造函数调用中,如:foo x((bar());
- g++ 拒绝,clang++ 接受: foo(x)( "bar" )( "baz" );
- 在 C++11 中使用 auto foo = "bar" vs std::string
- 为什么"Foo f(Bar());"可以是采用 Bar 类型并返回类型 Foo 的函数的声明?
- What is an `int foo::*bar::*`?
- 未解析的外部符号"public: class Foo __thiscall Bar::bu(char const *)"
- 使用 foo::bar 不会屏蔽 typedef-name ::bar?
- 类Bar{操作符Foo();}
- 它是法律符号吗:Foo &foo = Bar;
- 命名空间中的'Foo' 'bar' 不命名头文件中对象成员的类型
- std::vector<Bar> 作为类 Foo 中的成员变量需要一个空的构造函数
- 对foo::bar static ofstream的未定义引用
- 在C++中,foo::bar::baz()的含义是什么
- 以下对象的名称未知:类Foo::Bar
- Qt MOC错误的名称空间,如FOO::BAR