gpt4 book ai didi

c++ - c++11 中的关键字 typeof

转载 作者:可可西里 更新时间:2023-11-01 18:16:59 30 4
gpt4 key购买 nike

我知道:

  • typeof是 gcc 扩展,不是 C++ 标准的一部分。

问题:

  1. 是字typeof在 C++11 中弃用?换句话说,是否允许在使用 C++11 时仍将其用作 gcc 扩展?
  2. 说替换每个 typeof 是否正确?与 decltype产生相同的代码行为?
  3. 假设我有 template<typename T> class wrapper .申报wrapper_some_field的最佳方式是什么?这样它就相当于:Wrapper<typeof(some_field)> wrapper_some_field

最佳答案

Is the word typeof deprecated in C++11? in other words, is it allowed to still use it as a gcc extension when using C++11?

它没有弃用。它从未作为关键字存在。海合会 suggests如果你用 -std=c++** 编译您改为使用 __typeof__ .

Is it correct to say that replacing every typeof with decltype yields the same behaviour of the code?

没有。例如,给定:

int& foo();

decltype(foo())int&但是__typeof__(foo())int .

Assume I have template<typename T> class wrapper. [...]

你可以写成wrapper<std::remove_reference_t<decltype(some_field)>> wrap{some_field} , 但编写一个构造函数模板会更简洁:

template <class T> wrapper<T> make_wrapper(T const& val) { return {val}; }
auto wrap = make_wrapper(some_field);

或者,通过转发:

template <class T>
wrapper<std::decay_t<T>> make_wrapper(T&& val) {
return {std::forward<T>(val)};
}

尽管在 C++17 中您根本不会这样做,而只会使用类模板参数推导:

template <class T> struct wrapper { T t; };
template <class T> wrapper(T) -> wrapper<T>;
auto wrap = wrapper{42}; // wrap is a wrapper<int>

在 C++20 中,您甚至不需要演绎指南。

关于c++ - c++11 中的关键字 typeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37660862/

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