gpt4 book ai didi

c++ - 在运行时使用 'const' 参数构造类

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:52 25 4
gpt4 key购买 nike

这可能是一个简单的问题,但我找不到解决它的好方法。我正在使用一个具有类的 API,其构造函数需要 const double 作为其参数,例如:

MyClass(const double value);

问题是我想构造一系列实例,但传递的值只能在运行时知道。

更清楚的是,这是我所做的:

.h文件

std::vector<MyClass> my_class_vec;
std::vector<double> my_value_vec

在运行时,我可以获得值以对 my_value_vec 进行赋值。我想使用这些值来构造 my_class_vec:

.cpp 文件

for(int i = 0; i < my_value_vec.size(); i++)
my_class_vec(my_value_vec[i]);

我知道这是错误的,因为我不能将 double 作为 const double 参数传递。而且我在实例构造上也有一些不正确的用法,但我找不到一个好的方法来做我想做的事。有人有什么想法吗?非常感谢您的意见。

最佳答案

这是错误的,但出于完全不同的原因。对于初学者,您当然可以将 double 作为 const double 参数 传递。

void foo(const double b)
{
}

double c;

void bar()
{
foo(c);
}

这将毫无问题地编译。 const 指定的唯一内容,在这种情况下,是函数 foo() 不能修改它的参数。就是这样。它与传递的值是常量还是可变的无关。调用者可以自由传递 doubleconst double 作为参数。此参数按值传递。这意味着在任何情况下,都会为被调用的函数制作参数的拷贝。拷贝可以来自 doubleconst double,这没有区别。

你的问题完全不同。构建 vector 的尝试从根本上是错误的。1全错了。

std::vector<MyClass> my_class_vec;
std::vector<double> my_value_vec;

my_class_vec 是一个 vector 。

   my_class_vec(my_value_vec[i]);

由于 std::vector 未实现此处调用的 operator(),因此无法编译。 my_class_vec(something) 不会向 vector 添加任何内容。没有这样的事情。这不会构造任何东西。这会尝试在对象上调用 operator(),将 double 作为参数传递。由于 std::vector 未实现 () 运算符,因此无法编译。

使用现代 C++ 初始化样本 vector 的正确方法:

for (const auto &value:my_value_vec)
my_class_vec.emplace_back(value);

这假设 my_class_vec 是空的。 emplace_back() 在 vector 的后端构造一个新值,将 double value 传递给构造函数。请注意,无论有无 const 范围迭代中的限定符,这都适用。

关于c++ - 在运行时使用 'const' 参数构造类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38908621/

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