草庐IT

c++ - 返回对齐结构后出现段错误

我提出的问题的最小实例如下:struct__attribute__((aligned(16)))Foo{floatx,y,z;Foo(floatx,floaty,floatz):x(x),y(y),z(z){}};classBar{public:Foofoo;Bar(constFoo&foo):foo(foo){}Foobar(){returnfoo;}};intmain(){Bar*bar=newBar(Foo(0.0f,0.0f,0.0f));bar->bar();return0;}如果使用clang++(版本3.4,Ubuntu14.04中的默认版本)编译,这段代码在运行时会导致

c++ - 我能保证不会被这种 ODR 违规行为所困扰吗?

我有一个头文件,它声明了一个带有静态变量的模板并定义了它:/*my_header.hpp*/#ifndefMY_HEADER_HPP_#defineMY_HEADER_HPP_#includetemplatestructfoo{staticintbar;staticvoiddump(){printf("%d\n",bar);}};templateintfoo::bar;#endif//MY_HEADER_HPP_此header包含在main.cpp和共享库mylib中。特别是,mylib_baz.hpp只包含此模板并声明一个修改模板特化的函数。/*mylib_baz.hpp*/#ifn

c++ - 从父类(super class)调用子类中的虚函数

我知道这个问题一定被无数次问过,但我搜索了以前的问题,似乎什么也没有。它是关于C++中的继承和虚函数。我在从父类(superclass)的子类中调用虚函数时遇到问题。我举个例子。从三个相互继承的类开始。classA{voidfoo(){bar()}virtualvoidbar(){}};classB:publicA{virtualvoidbar(){}};classC:publicB{virtualvoidbar(){//dosomething}};现在我想要一个声明为B*但实例化为C*的变量。B*myObject=newC();myObject->foo();当我这样做并在myObj

c++ - 指向可变函数模板的指针

我有一个简单的类A,它提供了一个可变函数模板。此函数使用A中的私有(private)数据,但函数本身是公开的。类(class)如下:classA{public:A():_bla("bla:"){}templatevoidbar(constT&value){std::coutvoidbar(constH&value,constT&...data){std::cout在一个名为foo.hpp的单独文件中,我有一个函数foo(),它应该能够接收和使用函数a。bar()作为参数:intmain(intargc,char*argv[]){Aa;a.bar(1,"two",3,4);foo(&a.

c++ - 从 C++ 中同一个类的另一个成员函数中调用成员函数,Objective C

考虑以下几点:classA{//datamembersvoidfoo(){bar();//isthispossible?orshouldyousaythis->bar()notethatbarisnotstatic}voidbar(){}}//endofclassA如何从另一个内部调用成员函数?静态函数如何影响“this”的使用。应该在对象上调用函数吗? 最佳答案 Nawaz是正确的:'this'是隐含的。一个异常(exception)是如果foo是静态函数,因为在静态函数中没有“this”。在那种情况下,您不能使用bar()除非b

c++ - shared_ptr 析构函数、复制和不完整类型

我有一个头文件foo.h像这样(省略不相关的东西):#pragmaonce#includeclassBar;structFoo{std::shared_ptrgetBar();std::shared_ptrgetBar()const{returnconst_cast(this)->getBar();}};getBar()的非常量重载在.cpp文件中实现,该文件还可以看到Bar的完整定义.当foo.h包含在另一个文件中(没有看到Bar的定义),VS2010给我这样的警告:warningC4150:deletionofpointertoincompletetype'Bar';nodestr

c# - 关闭 Windows 8 Charm Bar

我有一台SurfacePro,我需要将其“锁定”为一种Kiosk模式。我知道“Kiosk模式”的更新正在进行中。但是我需要在此之前执行此操作。我在整个互联网上搜索过,但似乎无法通过在屏幕上滑动来禁用Charm栏。我找到了禁用触控板的方法。但不幸的是,由于这款平板电脑将在没有键盘的情况下使用,我需要禁用Charm栏。我的新想法是将整个Charm栏移出屏幕HWND数千像素,或者,可能在其上设置一个窗口样式,使其不显示。我曾尝试使用Spy++和基于自定义EnumWindows的控制台应用程序来为我提供一些窗口句柄。但是我无法让Charm栏打开足够长的时间以使它们生效。所以我的问题是:如何在W

c++ - 重新分配引用

假设我有一个类classFoo{public:~Foo(){delete&_bar;}voidSetBar(constBar&bar){_bar=bar;}constBar&GetBar(){return_bar;}private:Bar&_bar;}我对这个类的用法如下(假设Bar有一个工作拷贝构造函数)Foof;f.SetBar(*(newBar));constBar*bar=&(f.GetBar());f.SetBar(*(newBar(bar)));deletebar;我有一个类似的情况(在我没有写的代码中)并且当我在“删除栏”上设置的断点处进行调试时;行,我看到了&f._ba

c++ - 如何在 C++ 中对函数进行排序?

我不确定如何在C++中对我的函数进行排序。在C语言中,我只是将一个使用另一个函数的函数放置在该函数下方,尽可能靠近-这很常见。像这样:voidbar(){}voidfoo(){bar();}但是,在C++中,有几种类型的函数:免费功能私有(private)成员函数公共(public)成员函数静态成员函数我目前正在根据它们在.hpp文件中的排序方式制定我的函数顺序,例如:classFoo_bar{public:Foo_bar();voidfoo();private:intsome_member;voidbar();但是现在,如果构造函数使用foo()或bar(),它们将位于源文件中构造函

c++ - 我看到许多使用 "Foo ^ bar"的 C++ 示例 - 什么是 "^"?

与.NET相关吗?它似乎是某种指针,有什么区别?编辑:我实际上知道它是XOR运算符,但是从这个页面看这个例子。voidobjectCollection(){usingnamespaceSystem::Collections;**ArrayList^as=gcnewArrayList;**//...}这是什么?谢谢。 最佳答案 我假设您正在查看以下形式的结构:Foo^bar=gcnewFoo();你是对的,在.NET中它是一个“类似”指针的类型并且是C++/CLI的一部分,但不是标准的ISOC++。它是对垃圾收集的托管.NET对象的引