请考虑以下代码.调用doStuff()但未使用返回值时会发生什么?SomeClass还在创建吗?当然,创建本身可能会产生重要的副作用,但复制构造函数也是如此,它们在RVO/copy-elision中仍然被省略.
SomeClass doStuff(){
//...do stuff
return SomeClass( /**/);
}
SomeClass some_object = doStuff();
doStuff(); //What happens here?
Run Code Online (Sandbox Code Playgroud)
(编辑:用GCC -O3对此进行测试.构造对象然后立即销毁)
class A{
public:
A(){};
};
class B : public A{
public:
using A::A;
B(const B&) = default;
B( B&&) = default;
};
B b;
Run Code Online (Sandbox Code Playgroud)
编译器(g ++(5.4.0-6ubuntu1)/ c ++ 11)说"没有用于调用B :: B()的匹配函数",并将复制和移动构造函数列为候选.如果我评论那些默认的那些,那么它就会编译.是什么导致这个?它们明显违约有什么区别?如果那两条线不在那里,他们无论如何都会被拖欠.
template<typename T> class SomeClass{
public:
enum SomeEnum{ SOME_FLAG};
};
SomeClass::SomeEnum some_enum = SomeClass::SomeEnum::SOME_FLAG; //NO
SomeClass<int>::SomeEnum some_enum = SomeClass::SomeEnum::SOME_FLAG; //NO
SomeClass<int>::SomeEnum some_enum = SomeClass<int>::SomeEnum::SOME_FLAG; //YES
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为
类SomeClass,不带模板参数
没有模版参数,没有办法/解决方法使用它,有点使该类的枚举成为全局类,因此它不依赖于该参数。
不是我不能输入它们,而是它们可能又长又复杂,代码将更难阅读,在这里我不能使用诸如auto之类的东西。(我是模板的新手,如果这个问题很me脚,抱歉。)
假设我有一个const char*,我想用std :: cout打印,但我只想要打印前X个字符.有没有办法告诉std :: cout?(不在字符串中插入终止空值或制作临时副本.)
我读到一个完美预测的分支的开销为零/几乎为零。(例如:https : //stackoverflow.com/a/289860/8038490)我不太明白人们的意思。至少必须评估分支条件,这可以是一个简单的 bool 或函数调用,这需要时间。
如果我理解正确,您可以将纹理附加到 FBO,然后用于glDrawBuffers将这些附加点链接到(片段)着色器输出索引。glDrawBuffers调用后后一种状态存储在哪里?当前绑定的着色器,FBO,还是全局OpenGL状态?
class Vec3{
private:
float x, y, z;
public:
Vec3() = default;
Vec3(const float c) {x = c; y = c; z = c;}
static Vec3& normalize(Vec3& v) {/* normalize */ return v;}
};
Vec3 aaa = Vec3( 1.0f);
Vec3 bbb = Vec3::normalize( Vec3( 1.0f));
Vec3 ccc = Vec3::normalize( aaa);
Run Code Online (Sandbox Code Playgroud)
我想编写将向量作为参数的函数,对它们进行一些处理并将它们作为引用返回.
在上面的代码中bbb不会编译,因为它是对rvalue的非const引用.我不能使它成为const因为normalize需要修改对象.如果我使函数接受rvalue references(Vec3&& v)然后ccc不会编译因为aaa是左值.我可以在不写两个版本的情况下完成这项工作normalize吗?
(我对rvalue vs左值引用感到困惑,我不明白为什么a someFunc(const Vec3& v)会接受rvalues和lvalues,而非const版本不会.)
设置存储库后,在最初的提交中,添加的文件之一包含了不应包含的敏感数据(程序员的个人信息)。是否有可能从git历史中完全删除它?不是整个文件,只有几行包含敏感数据。
该存储库是相当新的,因此没有分支,并且自首次提交以来未修改特定文件。(PS:我是git的新手,我还不了解复杂的命令)
我有一个对象"a",我想将它复制到一个对象"b",但修改它有点不修改"a".然后,这将是这样的:
class SomeClass{
public:
int a;
public:
SomeClass(int _a) {a = _a;}
SomeClass& doStuff() {++a; return *this;}
};
const SomeClass a( 25);
const auto b = SomeClass( a).doStuff();
Run Code Online (Sandbox Code Playgroud)
这很好用,但是我可以说我现在/不想写"a"的类型,然后我想出了这个解决方案:
const auto b = std::remove_const<decltype( a)>::type( a).doStuff();
Run Code Online (Sandbox Code Playgroud)
我这样做了吗?对此有一个不那么难看的解决方案吗?(我不必两次输入"a".)使用汽车或其他东西.优选不是宏.