小编Art*_*ind的帖子

为什么构造函数语法不能与"unsigned int"类型一起使用?

为什么C++中的以下内容是非法的?

auto x = unsigned int(0);
Run Code Online (Sandbox Code Playgroud)

以下都可以:

auto y = int(0);
auto z = unsigned(0);
auto w = float(0);
Run Code Online (Sandbox Code Playgroud)

或者一般来说:

auto t = Type(... c-tor-args ...);
Run Code Online (Sandbox Code Playgroud)

(除了Type存在unsigned int).

c++ type-conversion language-lawyer

36
推荐指数
2
解决办法
2471
查看次数

sin(x)仅为GLSL片段着色器Intel HD4000上的中等大输入返回4个不同的值

我有一个用GLSL编写的简单的OpenGL 3.3片段着色器.从本质上讲,我正在评估sin(x)适度大的x(10,000到2,000,000之间),如下所示:

#version 330
out vec4 fColor;
void main() {
  fColor = vec4(sin(gl_FragCoord.x * gl_FragCoord.y));
}
Run Code Online (Sandbox Code Playgroud)

它在我的NVidia显卡上工作正常,但在我的Intel HD4000上,正弦仅返回四个不同的值(+/- 1.0和大约+/- 0.3),高于大约10,000的输入.

系统:Windows 64bit,(Intel)驱动程序版本15.28.20.64.3347.

我的问题:这是一个错误吗?或者供应商是否可以通过这种方式自由实施正弦?

opengl trigonometry intel glsl

9
推荐指数
1
解决办法
672
查看次数

当使用模板支持functor作为参数时,我应该使用什么限定符?

考虑以下代码:

template<class F>
void foo1(F f) { f(); }

template<class F>
void foo2(F const& f) { f(); }

template<class F>
void foo3(F&& f) { f(); }
Run Code Online (Sandbox Code Playgroud)

foo我应该使用哪个版本?foo1这是我在"野外"看到的最多,但我担心它可能会引入我不想要的副本.我有一个很复杂的自定义仿函数,所以我想避免这种情况.目前我倾向于foo3(因为foo2不允许变异的算子),但我不确定其含义.

我的目标是C++ 11.

c++ templates functor function-object c++11

7
推荐指数
1
解决办法
210
查看次数

shared_from_this和私有继承

CPP参考具有如何使用本示例std::enable_shared_from_this(略作调整)

class Good : std::enable_shared_from_this<Good>
{
    public: std::shared_ptr<Good> getptr() { return shared_from_this(); }
};

...

auto good = std::make_shared<Good>();
good->getptr();
Run Code Online (Sandbox Code Playgroud)

但是,这在Visual Studio 2015(企业版14.0.25123.00更新2)中不起作用,即std::bad_weak_ptr引发异常。

查看其他示例(包括与cpp referenceMicrosoft不同的示例),我注意到它们使用public继承而不是继承private。使用public继承实际上可以解决我的问题(std::bad_weak_ptr不再是有效的shared_ptr替代了)。

Cpp参考没有提到我必须公开继承std::enable_shared_from_this,所以错误在哪里?Visual Studio的行为是否错误(我猜想在使用private继承时存在可见性问题)还是cpp引用未提及此限制?

PS:make_shared<good>()或者shared_ptr<Good>(new Good)没有什么关系。

PSS:两种版本都可以正常编译,而专用版本则无法工作,这使其成为一种非常讨厌的错误。

编辑:更改structclass。Cpp参考实际上在其示例中使用了公共继承。尽管如此,没有任何话说它必须是公开的。它实际上在那里列出,我只需要学习仔细阅读。谢谢@Angew。

c++ visual-studio-2015

6
推荐指数
1
解决办法
925
查看次数