建设者
PixelPlane::PixelPlane(int& width, int& height, const std::string& label)
Run Code Online (Sandbox Code Playgroud)
每当我使用以下参数初始化对象时
PixelPlane pixel_plane(960, 540, "Title");
Run Code Online (Sandbox Code Playgroud)
Visual Studio在960参数下划线并显示消息No instance of constructor "PixelPlane::PixelPlane matches the argument list. Argument types are: (int, int, const char[5])。我看到有人做了类似的事情而没有错误https://www.youtube.com/watch?v=1nfuYMXjZsA。我做错了什么还是只是忽略了什么?
你逝去的右值小号(960和540)作为参数传递给需要的构造int&引用。这是禁止的。您可以将右值绑定到一个参考的唯一时间是基准标记时const,如const int&(或当你有一个转发参考 ;还参见Scott Meyers的优秀后(只需更换通用的转发,因为这是这些引用是如何现在叫在C ++标准中))。
std::string具有从一个隐式转换const char*(构造函数#5中的链路)中,向其中所述const char[5]的类型label衰变到,因此该字符串的部分是确定。
顺便说一句,不要通过const引用传递基本类型。它不会保存任何内容,并且可能会阻止优化。const仅当要传递的对象的复制成本很高(或处理模板代码时,请参见@Mark的注释)时,才通过引用传递。就您而言,只需按值传递
PixelPlane::PixelPlane(int width, int height, const std::string& label)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |