相关疑难解决方法(0)

总是用{}初始化对象是好习惯吗?

使用新的{}语法初始化对象,如下所示:

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)

这是一个好习惯吗?有没有办法避免这样的问题?

c++ initializer-list c++11

3
推荐指数
1
解决办法
477
查看次数

大括号构造函数更喜欢 initializer_list 而不是更好的匹配。为什么?

#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 语句中使用所需的构造函数而无需再次写入类型吗?

c++ constructor

2
推荐指数
1
解决办法
226
查看次数

标签 统计

c++ ×2

c++11 ×1

constructor ×1

initializer-list ×1