gpt4 book ai didi

c++ - 通过类引用

转载 作者:行者123 更新时间:2023-11-30 02:09:13 24 4
gpt4 key购买 nike

我完全糊涂了。在我类(class)的这个例子中,我有:

public:
typedef DoubleLinkedNode<DataType> Node;
private:
const DataType* fValue;
Node* fNext;
Node* fPrevious;
DoubleLinkedNode(): fValue((const DataType*)0){
fNext = (Node*)0;
fPrevious = (Node*)0;
}

这意味着 fValueconst DataType* ,现在我想应用/定义数据类型,如 stringintfValue通过这部分:

    DoubleLinkedNode( const DataType& aValue ){

std::cout << " -- " << aValue << std::endl;
}

我很困惑,我必须在那里写什么,为什么?我如何定义 aValue到我的fValue ?!(注意:std::cout << " -- " << aValue << std::endl; 仅用于测试)

最佳答案

我不太确定你在这里要做什么,但是如果你想构造 DoubleLinkedNode 时 fValue 指向 aValue 的地址(它通过引用传递给构造函数)你需要定义你的构造函数方式:

DoubleLinkedNode( const DataType& aValue ) : fValue(&aValue) {
std::cout << " -- " << aValue << std::endl;
}

请注意,这样做并非 100% 安全,因为您可能会不小心使用 rvalue 引用调用此构造函数(为了简化事情:对在函数调用后立即销毁的对象的引用).例如,以下代码不会引发编译错误:

std::string s = "Hello ";
DoubleLinkedNode<std::string> node = DoubleLinkedNode<std::string>(s + "World");

即使 s + "World" 是一个临时值,它会在构造函数调用后立即销毁,现在 fValue 将指向一个无效的内存位置。这非常糟糕,因为您在编译期间不会收到任何警告,但您会在运行时遇到一些非常难以调试的行为。

因此,制作一个需要指针而不是引用的构造函数可能会更好:

DoubleLinkedNode( const DataType* aValue ) : fValue(aValue) {
std::cout << " -- " << aValue << std::endl;
}

关于c++ - 通过类引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5634832/

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