C++11 标准::向量<;bool>;::在C+中放置+;11

C++11 标准::向量<;bool>;::在C+中放置+;11,c++11,C++11,根据: 注释 专业化std::vector没有emplace()成员 直到C++14 这是什么意思?模板专门化可以省略成员吗?是否意味着成员函数根本不存在?或者它只是不专业 以下代码似乎适用于gcc 7.1.0: #include <iostream> #include <vector> using namespace std; int main() { std::vector<bool> v; v.emplace_back(true);

根据:

注释

专业化
std::vector
没有
emplace()
成员 直到C++14

这是什么意思?模板专门化可以省略成员吗?是否意味着成员函数根本不存在?或者它只是不专业

以下代码似乎适用于gcc 7.1.0:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    std::vector<bool> v;
    v.emplace_back(true);
    v.emplace_back(false);
    for (const auto &b : v) {
        std::cout << b << std::endl;
    }
}
#包括
#包括
使用名称空间std;
int main()
{
std::向量v;
v、 向后放置(正确);
v、 向后放置(假);
用于(常数自动和b:v){

std::cout模板专门化可以与通用模板完全不同。因此,理论上,您无法知道类
A
A
是否有任何公共成员:

template <typename T>
class A
{
public:
    void foo()
    {}
};


template <>
class A<bool>
{
public:
    void bar()
    {}
};


int main()
{
    A<int> a;
    a.foo();

    A<bool> b;
    b.bar();

    b.foo();  // error: 'class A<bool>' has no member named 'foo'
}
模板
甲级
{
公众:
void foo()
{}
};
模板
甲级
{
公众:
空条()
{}
};
int main()
{
A A;
a、 foo();
A b;
b、 bar();
b、 foo();//错误:“类A”没有名为“foo”的成员
}
std::vector
是一个专门化的模板。您从标准中引用的话说,
emplace()
方法在该专门化中缺失,直到C++14


实际上,libstdc++等具体的标准库可能提供了
emplace()
std::vector
方法,即使在C++14之前,标准中也没有要求它。

模板专用化可以与通用模板完全不同。因此,理论上,您无法知道类
A
A
是否有任何公共成员:

template <typename T>
class A
{
public:
    void foo()
    {}
};


template <>
class A<bool>
{
public:
    void bar()
    {}
};


int main()
{
    A<int> a;
    a.foo();

    A<bool> b;
    b.bar();

    b.foo();  // error: 'class A<bool>' has no member named 'foo'
}
模板
甲级
{
公众:
void foo()
{}
};
模板
甲级
{
公众:
空条()
{}
};
int main()
{
A A;
a、 foo();
A b;
b、 bar();
b、 foo();//错误:“类A”没有名为“foo”的成员
}
std::vector
是一个专门化的模板。您从标准中引用的话说,
emplace()
方法在该专门化中缺失,直到C++14


实际上,libstdc++等具体的标准库可能提供了
emplace()
std::vector的
method甚至在C++14之前就已经有了,但在标准中没有要求它。

你问的是
emplace
,在代码中你问的是
emplace\u back
。但是
emplace\u back
也被添加到了C++14中。@Zereges你说得对,但两个函数都有相同的注释。你问的是
emplaceode>在代码中有
emplace\u back
。但是
emplace\u back
也是在C++14中添加的。@Zereges你是对的,但这两个函数都有相同的注释。谢谢你的澄清,我觉得有某种“继承性”当专门化模板时。感谢您的澄清,我的印象是专门化模板时有某种“继承”。