gpt4 book ai didi

c++ - 有没有一种方法可以一次声明多个相同类型的对象,并仅通过一个表达式立即用相同的右值对其进行初始化?

转载 作者:行者123 更新时间:2023-12-01 12:54:23 26 4
gpt4 key购买 nike

我想声明多个相同类型的对象,并通过一个表达式用相同的右值对其进行初始化;无需通过单独的语句声明和初始化它们。

我想要的是这样的:

int a = b = 10;  // dummy-statement. This does not work.

或者
int a = int b = 10; // dummy-statement. This does not work either.

代替
int b = 10;
int a = b;

有没有办法做到这一点?

最佳答案

从技术上讲,是的:int a = value, b = a;,或者您可以考虑使用int a, b = a = value;。如果没有重复的标识符,则不行,至少在C语言中不行;语法根本没有提供它。语法中的每个“声明者=初始值设定项”在C 2018 6.7.6 1中的每个语法生成和6.7.6 2中的显式声明中只能声明一个对象:“每个声明者都声明一个标识符……”

正如评论中提到的那样,这是使用C++做到这一点的可怕方法。对于单一声明中的初始化顺序,有关线程的问题等,C++的规则我不作任何表述。这仅是一种教育练习。切勿在生产代码中使用此代码。

template<class T> class Sticky
{
private:
static T LastInitializer; // To remember last explicit initializer.
T Value; // Actual value of this object.

public:
// Construct from explicit initializer.
Sticky<T>(T InitialValue) : Value(InitialValue)
{ LastInitializer = InitialValue; }

// Construct without initializer.
Sticky<T>() : Value(LastInitializer) {}

// Act as a T by returning const and non-const references to the value.
operator const T &() const { return this->Value; }
operator T &() { return this->Value; }
};

template<class T> T Sticky<T>::LastInitializer;

#include <iostream>

int main(void)
{
Sticky<int> a = 3, b, c = 15, d;

std::cout << "a = " << a << ".\n";
std::cout << "b = " << b << ".\n";
std::cout << "c = " << c << ".\n";
std::cout << "d = " << d << ".\n";
b = 4;
std::cout << "b = " << b << ".\n";
std::cout << "a = " << a << ".\n";
}

输出:

a = 3。
b = 3。
c = 15。
d = 15。
b = 4。
a = 3。

关于c++ - 有没有一种方法可以一次声明多个相同类型的对象,并仅通过一个表达式立即用相同的右值对其进行初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60129308/

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