为什么我可以把变量名作为c++中的构造函数参数?[duplicate]

wljmcqd8  于 2022-11-19  发布在  其他
关注(0)|答案(2)|浏览(128)

此问题在此处已有答案

Is it true that a default constructor is synthesized for every class that does not define one?(6个答案)
7小时前关闭。
在下列程式码中:`

#include <iostream>

struct MyStruct {
  int i = 1;
};
int main() {
  MyStruct(some); // some is actually a variable name, it compiles, is it in the
                  // c++ standard?
  std::cout << some.i << std::endl;
}

为什么我可以initialzieMyStruct(some)`?上面的代码编译和运行

nmpmafwu

nmpmafwu1#

我怀疑第一个代码中的变量“some”是一个变量,当我试图声明一个名为some的变量时,它不会运行。

struct MyStruct {
    MyStruct(const int &value) {}
};

int main() {
    std::string(s2);
    MyStruct(some); // illegal now 
    std::cout << s2 << std::endl;
}

您没有要示例化的MyStruct的标识符。

struct MyStruct {
    MyStruct(const int &value) {}
};

int main() {
    int some = 5;
    std::string(s2);
    MyStruct myStruct (some); // illegal now 
    std::cout << s2 << std::endl;
}

这里我将“myStruct”作为“MyStruct”的标识符,还声明了一个名为“some”的变量来检查它是否以这种方式运行,它确实以这种方式运行。

bmp9r5qi

bmp9r5qi2#

声明和定义变量的方式非常复杂。如果你想定义std::stringMyStruct,你应该使用以下方式:std::string s2("initialized value"); MyStruct some。在第二种情况下,MyStruct定义了一个构造函数,因此第一种情况下的默认构造函数不再存在,除非显式定义它。
因此在第二种情况下,如果要使用一个参数初始化示例,则支持以下方式:MyStruct some(10);。此语句调用您编写的构造函数。

相关问题