gpt4 book ai didi

c++ - 类数据成员中可以使用模板参数推导吗?

转载 作者:IT老高 更新时间:2023-10-28 23:18:38 27 4
gpt4 key购买 nike

C++17 引入 template argument deduction .

使用 gcc-7.2,我可以在函数中轻松使用它:

int test() {
std::pair d(0, 0.0);
}

我希望在类非静态数据成员中使用相同的语法,例如:

class Test {
std::pair d_{0, 0.0};
};

但这会导致 gcc error: invalid use of template-name ... without an argument list, with --std=c++17 pass.

我尝试了其他一些组合,但似乎都没有。

这是标准的预期行为,还是编译器不完全支持的情况?我在标准中找不到对类数据成员的任何明确引用。

我的用例当然要复杂得多,使用这种语法会非常方便(想想函数被传递和存储)。

最佳答案

Is this the intended behavior by the standard, or is this a case of incomplete support by the compiler?

是的,这是预期行为。 [dcl.type.class.deduct]阅读:

If a placeholder for a deduced class type appears as a decl-specifier in the decl-specifier-seq of an initializing declaration ([dcl.init]) of a variable, [...]

A placeholder for a deduced class type can also be used in the type-specifier-seq in the new-type-id or type-id of a new-expression, or as the simple-type-specifier in an explicit type conversion (functional notation). A placeholder for a deduced class type shall not appear in any other context.

非静态数据成员不是变量,我们不在其他情况下。

注意,同样的原则也适用于试图用 auto 声明的非静态数据成员:

struct X {
auto y = 0; // error
};

默认成员初始化器就是这样 - 默认初始化器。如果你提供了一个构造函数,用不同类型的表达式初始化成员怎么办?

关于c++ - 类数据成员中可以使用模板参数推导吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47398358/

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