草庐IT

c++ - 精确定位 "conditional jump or move depends on uninitialized value(s)"valgrind 消息

所以我从valgrind收到了一些神秘的未初始化值消息,而关于错误值的来源一直是个谜。似乎valgrind显示了最终使用未初始化值的位置,而不是未初始化值的来源。==11366==Conditionaljumpormovedependsonuninitialisedvalue(s)==11366==at0x43CAE4F:__printf_fp(in/lib/tls/i686/cmov/libc-2.7.so)==11366==by0x43C6563:vfprintf(in/lib/tls/i686/cmov/libc-2.7.so)==11366==by0x43EAC03:vsnpr

c++ - move 分配与标准 copy-and-swap 不兼容

测试新的move语义。我刚刚询问了我在使用MoveConstructor时遇到的问题。但正如评论中发现的那样,问题实际上是当您使用标准的“copy-and-swap”习语时,“move赋值”运算符和“标准赋值”运算符会发生冲突。这是我正在使用的类(class):#include#includeclassString{intlen;char*data;public://Defaultconstructor//InTermsofC-StringconstructorString():String(""){}//NormalconstructorthattakesaC-StringStrin

c++ - move 分配与标准 copy-and-swap 不兼容

测试新的move语义。我刚刚询问了我在使用MoveConstructor时遇到的问题。但正如评论中发现的那样,问题实际上是当您使用标准的“copy-and-swap”习语时,“move赋值”运算符和“标准赋值”运算符会发生冲突。这是我正在使用的类(class):#include#includeclassString{intlen;char*data;public://Defaultconstructor//InTermsofC-StringconstructorString():String(""){}//NormalconstructorthattakesaC-StringStrin

c++ - 什么是 move 语义?

我刚听完软件工程电台podcastinterviewwithScottMeyers关于C++0x.大多数新功能对我来说都很有意义,而且我现在对C++0x感到非常兴奋,除了一个。我仍然没有得到move语义......它到底是什么? 最佳答案 我发现使用示例代码最容易理解move语义。让我们从一个非常简单的字符串类开始,它只保存一个指向堆分配内存块的指针:#include#includeclassstring{char*data;public:string(constchar*p){size_tsize=std::strlen(p)+1

c++ - 将局部变量声明为右值引用是否无用,例如T&& r = move (v)?

你们能不能给我一个在特定情况下的说明性例子来证明以下陈述是有用和必要的?AnyTypeMovablev;AnyTypeMovable&&r=move(v); 最佳答案 不,AnyTypeMovable&&r=move(v);这里一点用处都没有。考虑以下代码:#include#includeclassMyMovableType{inti;public:MyMovableType(intval):i(val){}MyMovableType(MyMovableType&&r){this->i=r.i;r.i=-1;}MyMovableTy

c++ - 将局部变量声明为右值引用是否无用,例如T&& r = move (v)?

你们能不能给我一个在特定情况下的说明性例子来证明以下陈述是有用和必要的?AnyTypeMovablev;AnyTypeMovable&&r=move(v); 最佳答案 不,AnyTypeMovable&&r=move(v);这里一点用处都没有。考虑以下代码:#include#includeclassMyMovableType{inti;public:MyMovableType(intval):i(val){}MyMovableType(MyMovableType&&r){this->i=r.i;r.i=-1;}MyMovableTy

c++ - move 语义和参数评估顺序

考虑以下几点:std::stringmake_what_string(conststd::string&id);structbasic_foo{basic_foo(std::stringmessage,std::stringid);};structfoo:publicbasic_foo{foo::foo(std::stringid):basic_foo(make_what_string(id),std::move(id))//Isthisvalid?{}};由于未指定C++中的参数评估顺序,我想知道是否这条线basic_foo(make_what_string(id),std::mov

c++ - move 语义和参数评估顺序

考虑以下几点:std::stringmake_what_string(conststd::string&id);structbasic_foo{basic_foo(std::stringmessage,std::stringid);};structfoo:publicbasic_foo{foo::foo(std::stringid):basic_foo(make_what_string(id),std::move(id))//Isthisvalid?{}};由于未指定C++中的参数评估顺序,我想知道是否这条线basic_foo(make_what_string(id),std::mov

c++ - 优化编译器可以添加 std::move 吗?

编译器能做吗自动左值到右值转换如果它可以证明左值不会再次使用?这里有一个例子来阐明我的意思:voidFoo(vectorvalues){...}voidBar(){vectormy_values{1,2,3};Foo(my_values);//maythecompilerpretendIusedstd::movehere?}如果std::move被添加到注释行,那么vector可以move到Foo的参数,而不是复制。但是,正如所写,我没有使用std::move.静态证明在注释行之后不会使用my_values非常容易。那么编译器允许movevector,还是需要复制它?

c++ - 优化编译器可以添加 std::move 吗?

编译器能做吗自动左值到右值转换如果它可以证明左值不会再次使用?这里有一个例子来阐明我的意思:voidFoo(vectorvalues){...}voidBar(){vectormy_values{1,2,3};Foo(my_values);//maythecompilerpretendIusedstd::movehere?}如果std::move被添加到注释行,那么vector可以move到Foo的参数,而不是复制。但是,正如所写,我没有使用std::move.静态证明在注释行之后不会使用my_values非常容易。那么编译器允许movevector,还是需要复制它?