-
C++的花括号初始化就是用来匹配std::initializer_list构造函数的吗? |
Beta Was this translation helpful? Give feedback.
Answered by
Mq-b
Dec 26, 2023
Replies: 1 comment 1 reply
-
显然不是,虽然在某些情况下它会优先。不过事实上
回到最开始的问题
我们可以随便举出很多的反例: #include <iostream>
#include <vector>
struct X{
X() { puts("X"); }
};
int main(){
std::vector<X> v{10};
}
constexpr explicit vector( size_type count, const Allocator& alloc = Allocator() ); C++20 起,构造拥有 count 个 默认插入的 T 实例的容器。 std::vector v{std::vector{1,2,3}}; // std::vector<int> std::vector v{std::vector{1},std::vector{2}}; //就能得到std::vector<std::vector<int>>
在 loser Homework 第12题:实现 make_vector 有详细讲解。 |
Beta Was this translation helpful? Give feedback.
1 reply
Answer selected by
mq-loser
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
显然不是,虽然在某些情况下它会优先。不过事实上
{}
自身的作用可以说是数不胜数,它不是表达式,没有类型。回到最开始的问题
我们可以随便举出很多的反例:
{10}
匹配到的是 std::vector 的C++20 起,构造拥有 count 个 默认插入的 T 实例的容器。
在 loser Homework 第12题:实现 make_vector 有详细讲解。