相关疑难解决方法(0)

为什么C++ 11不支持指定的初始化列表作为C99?

考虑:

struct Person
{
    int height;
    int weight;
    int age;
};

int main()
{
    Person p { .age = 18 };
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在C99中是合法的,但在C++ 11中不合法.

什么是标准委员会排除了这样一个方便的功能支持的理由?

c c++ initialization c99 c++11

110
推荐指数
5
解决办法
5万
查看次数

为什么我不能括起来初始化从另一个结构派生的结构?

当我运行此代码时:

struct X {
    int a;
};

struct Y : public X {};

X x = {0};
Y Y = {0};
Run Code Online (Sandbox Code Playgroud)

我明白了:

error: could not convert ‘{0}’ from ‘<brace-enclosed initializer list>’ to ‘Y’
Run Code Online (Sandbox Code Playgroud)

为什么大括号初始化适用于基类而不适用于派生类?

c++ struct c++11 list-initialization

37
推荐指数
2
解决办法
8660
查看次数

如何通过继承的方式向结构体添加通用功能,而无需显式初始化基础结构体?

我有一些结构,它们都具有一些通用功能,我已将它们放入模板化基类中(此处Foo<int>

template<int I>
struct Foo
{
    void foo() { std::cout << "foo: " << I << '\n'; }
};

struct Bar : Foo<1>
{
    int i;
    int j;
};
Run Code Online (Sandbox Code Playgroud)

现在,当我初始化它们中的任何一个时,我必须这样做:

Bar b{{}, 1, 2};
Run Code Online (Sandbox Code Playgroud)

我希望能够这样做:

Bar b{1, 2};
Run Code Online (Sandbox Code Playgroud)

而且也无需编写构造函数的样板。这个问题有解决办法吗?

类似的问题在这里被问到,但是,这是 7 年前的事了,所以我想知道从那时起是否有任何进展。另外,该问题被标记为与此处的
问题重复,但是这个问题略有不同,因为基本结构不为空。 此外,除了以更具声明性的方式向某些结构添加功能之外,我并没有真正尝试完成任何其他事情,而不是重复每个结构中所有常用方法的定义。因此,任何通过规避继承(理想情况下宏除外;D)来实现这一点的解决方案都可以工作。

c++ c++20

4
推荐指数
1
解决办法
85
查看次数

标签 统计

c++ ×3

c++11 ×2

c ×1

c++20 ×1

c99 ×1

initialization ×1

list-initialization ×1

struct ×1