- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个名为 Coord 的类...它有实例数据 x、y。我想重写 * 运算符,以便 * 运算符可用于将 Coord 乘以整数或 double 值!这是我提出的解决方案:
Coord& Coord::operator*(int n)
{
this->x = this->x*n;
this->y = this->y*n;
return *this;
}
有效 - 我已经测试了 main 的一些打印输出...唯一的问题是...我从 -Weffc++ 标志收到警告!它说我的函数应该按值返回!我知道这个标志对应于“Effective C++”这本书,但我手头没有拷贝 - 这本书有什么建议?值传递是什么意思?
最佳答案
只是详细说明 Grizzly 的评论...这不是就地乘法。因此,您应该将其声明为 const 以明确防止:
Coord Coord::operator*(int n) const {
Coord c(*this);
c.x *= n;
c.y *= n;
return c;
}
或者如果你有一个有用的构造器:
Coord Coord::operator*(int n) const {
return Coord(x*n, y*n);
}
就地乘法不同(并且非常量):
Coord& Coord::operator*=(int n) {
x *= n;
y *= n;
return *this;
}
关于c++ - 用整数和 -Weffc++ 标志覆盖 +/-/*/%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360370/
这个问题在这里已经有了答案: Understanding -Weffc++ (3 个答案) 关闭 4 年前。 我很难理解这个错误。我正在编译 -Weffc++旗帜。 此结构编译正常。 struct
考虑以下程序: #include struct S { S (){} private: void *ptr = nullptr; std::string str = "";
我对 Weffc++ 警告有理解上的问题。 main.cpp: In constructor ‘B::B()’: main.cpp:13:1: warning: ‘B::a’ should be in
我有一个名为 Coord 的类...它有实例数据 x、y。我想重写 * 运算符,以便 * 运算符可用于将 Coord 乘以整数或 double 值!这是我提出的解决方案: Coord& Coord::
我有一些代码 here我正在使用 -Weffc++ -Wall -Wextra 进行编译。 基本上我有这个片段: class base {}; class test : public base { p
我尝试用 std::shared_ptr 编译非常简单的树节点。在我的编译器选项中,我使用了 -Weffc++ 和 -Werror 但它抛出了 2 个我不理解的错误,因此我无法想象解决方案。 最小示例
我收到 -Weffc++ 发出的警告,这似乎是错误的。我可以用第二双眼睛来确认: template class CLASS_TYPE, typename T> class some_class { t
我对一个分为不同子项目的大型项目使用 boost build。这里是 jamroot 文件: project : requirements debug:DEBUG releas
我有一个使用很多很多库的大项目。其中一些是 HDF5、PugiXML、Boost.ASIO、Qt、MuParser 等等。这些库有的是header包含的,有的是预编译的,有的是我自己编译的。我想使用
假设我有这样一个类: class MyClass { private: vector myMember; public: MyClass(const Y
我想知道,-Weffc++ 标志是否有等效的 MSVC(++)?它是几号? 我在 MS website 上的编译器警告/错误列表中没有看到类似的内容. 最佳答案 没有任何等价物。 Visual C++
struct Bar { Bar() {} }; struct Foo { Foo() = default; Bar m_bar; }; int main() { Fo
这是一个重载的||在我的类中定义的运算符: bool operator|| (const MyClass& v) const { return ......; //some calculat
我是一名优秀的程序员,十分优秀!