使用新的{}语法初始化对象,如下所示:
int a { 123 };
Run Code Online (Sandbox Code Playgroud)
有益 - 您不会声明函数而不是错误地创建变量.我甚至听说应该习惯这样做.但看看会发生什么:
// I want to create vector with 5 ones in it:
std::vector<int> vi{ 5, 1 }; // ups we have vector with 5 and 1.
Run Code Online (Sandbox Code Playgroud)
这是一个好习惯吗?有没有办法避免这样的问题?
#include <vector>
using std::size_t;
struct Foo
{
Foo(size_t i, char c) {}
};
Foo Bar1()
{
size_t i = 0;
char c = 'x';
return { i, c }; // good
}
std::vector<char> Bar2()
{
size_t i = 0;
char c = 'x';
return { i, c }; // bad
}
Run Code Online (Sandbox Code Playgroud)
https://wandbox.org/permlink/87uD1ikpMkThPTaw
警告:将 'i' 从 'std::size_t {aka long unsigned int}' 的转换范围缩小到 { } 内的 'char'
显然它试图使用向量的初始化列表。但是为什么不使用更好的匹配vector<char>(size_t, char)呢?
我可以在 return 语句中使用所需的构造函数而无需再次写入类型吗?