【问题标题】:Usage of decltype in function parameters [closed]在函数参数中使用 decltype [关闭]
【发布时间】:2013-06-27 11:22:40
【问题描述】:

这在今天似乎是一种常见的方法

auto foo(T a, K b) -> dectlype(a+b);

但是这段代码呢?

void foo(decltype(a));

其中“a”是某个类中变量的一种类型。喜欢:

class SomeClass
{
    public:
    void foo(decltype(a)); 
    private: 
    int a;
};

现在,我知道旧式方法是使用 typedef:

typedef int IntType;

但是 decltype 呢?你怎么看?

在我看来 - 这有以下缺点:

  1. 不能在抽象接口中使用(没有“a”来获取类型 的)
  2. 使代码更难阅读
  3. 最常见的 IDE 不会生成 decltyped 函数的正确定义

我能想到的一个专业人士:

  1. 您无需更改 typedef 就可以安全地避免类型更改。

Tbh,我认为这种使用 decltype 的缺点远远超过了这种用法,但我想听听我以外的意见 :)

【问题讨论】:

  • 目标是什么?确保函数参数类型与a的类型完全相同?
  • 是的。这就是它的意义
  • "最常见的 IDE 不会为 decltyped 函数生成正确的定义" erm what
  • @Zeks 比写一个模板函数template<typename T> void foo(T);。这对眼睛来说要容易得多,而且基本上是一样的。
  • @arne 除了模板不能与 Q_OBJECT 组合之外:)

标签: c++ c++11 coding-style


【解决方案1】:

我不希望我的 API 发生变化,因为我更改了某些变量的类型并忘记了影响。

如果我这样做,我想要一个编译错误。

就这样吧。

【讨论】:

  • 就像我说的 - 我不认为 decltype 是个好主意 :) 到目前为止,cmets 让我相信我确实是正确的,不应该那样使用它。
  • @Zeks:是的,我会这么说。它对于尾随返回类型 和模板等很有用。但除此之外,我会想念它。
猜你喜欢
  • 1970-01-01
  • 2017-09-17
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多