我正在學習C++。 我學會了什麼時候應該在谷歌風格指南中使用「傳遞指針」或「傳遞常量引用」。 它說將指針轉換爲C++中的值會花費多少錢?
(1)如果任何成員在函數中的變化,值應該通過指針傳遞。 (2)如果任何成員在函數中沒有改變,則該值應該由const引用傳遞。
我不知道,當我有一個實例的指針,並且任何成員都不會在新函數中改變,無論我是否需要通過const引用來傳遞函數來保持谷歌風格指南。如果是這樣,我需要通過'*指針'將指針轉換爲實際值。我關心從指針轉換爲實際價值的成本,但老實說,我不知道它是否有成本。請告訴我如何在這種情況下做到這一點。
這種情況發生在我使用訪客模式時。我需要使用'this'指針,但成員不會在函數中更改。我不知道在這種情況下保留谷歌風格指南是否有任何好處或成本。
如果我複製下面的示例代碼。它是訪客模式的一部分。它有兩個使用指針傳遞和通過const引用傳遞的函數。
#include <iostream>
class ClassA;
class VisitorInterface {
public:
virtual ~VisitorInterface() = default;
virtual void operator() (ClassA* obj) const = 0;
virtual void operator() (const ClassA& obj) const = 0;
};
class VisitorsHostInterface { // = visitor's host
public:
virtual ~VisitorsHostInterface() = default;
virtual void accept(VisitorInterface* v) = 0;
virtual void accept(const VisitorInterface& v) = 0;
};
class VisitorsHost : public VisitorsHostInterface {
public:
virtual ~VisitorsHost();
void accept(VisitorInterface* v) override {};
void accept(const VisitorInterface& v) override {};
};
class ClassA : public VisitorsHostInterface {
public:
void print() const { std::cout << "ClassA value_ = " << value_ << std::endl; }
void accept(VisitorInterface* v) override {
(*v)(this);
};
void accept(const VisitorInterface& v) override {
v(*this);
};
private:
int value_=11;
};
class Visitor : public VisitorInterface {
public:
virtual ~Visitor() = default;
void operator() (ClassA* obj) const override {
if (obj) {
obj->print();
}
}
void operator() (const ClassA& obj) const override {
obj.print();
}
};
不遵循Google風格指南。改爲遵循C++核心指南。 https://github.com/isocpp/CppCoreGuidelines – Brian
@Brian:爲什麼拒絕Google風格指南?也許OP被告知要明確地遵循它。 – ShadowRanger
@Brian:謝謝你告訴我另一條準則。三人投票您的評論。所以看起來你提出的建議似乎更爲標準。我會讀它。 – mora