gpt4 book ai didi

c++ - 堆栈模板参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:27:20 25 4
gpt4 key购买 nike

关注模板参数

我可以像这样创建一个堆栈(来自标准库的适配器类模板)对象,

stack<int, vector<int>> myStack;

我知道第二个模板参数表示堆栈的底层数据结构。但是为什么下面这行没有给出编译时错误呢?

stack<int, vector<string>> myStack;

请注意,我正在声明一个堆栈以包含 int 类型的元素,但同时我正在声明底层数据结构以保存 string 元素。

在功能上,它就像一堆字符串元素一样工作。

最佳答案

您正在做的是未定义的行为。不过,我将解释为什么它看起来工作正常。

容器适配器std::stack<T, TContainer>包含几个类型符号,它们是常用类型的别名。有一个列表here .

这里我们关心的是 std::stack::value_type .它基本上决定了方法的类型 std::stack::push和 friend 期待:

void push( const value_type& value );

我们还可以看到它是如何定义的:

using value_type = typename TContainer::value_type

因此,所有操作中使用的类型实际上仅基于第二种类型,TContainer !在您的情况下,即 vector<string>::value_type , 所以 value_type将是 string 的别名.用于 T 的类型, int在您的情况下,未使用。因此,一切似乎都有效。

但是即使这在您的情况下适用于您的特定的编译器,但实际上是不允许的:

The behavior is undefined if T is not the same type as Container::value_type. (since C++17)

您可以找到此报价的来源 here .

关于c++ - 堆栈模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38806882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com