为什么C ++编译器给出这个错误? 为什么我可以从B访问lol(),但不能访问rofl()[不带参数]。 渔获在哪里? class A { public: void lol(void) {} void rofl(void) { return rofl(0);} virtual void rofl(int x) {} }; class B : public A { public: virtual void rofl(int x) {} }; int _tmain(int argc, _TCHAR* argv[]) { A a; a.lol(); a.rofl(1); a.rofl(); B b; b.lol(); b.rofl(1); b.rofl(); //ERROR -> B::rofl function […]
XPath背后的故事和对命名空间的支持是什么? 作为规范的XPath是否在名称空间之前? 如果我有一个文档的元素已被赋予一个默认的名称空间: <foo xmlns="uri" /> 看起来好像某些XPath处理器库不会识别//foo因为命名空间,而其他的会。 我的团队考虑的选项是使用正则expression式向XPath添加一个名称空间前缀(可以通过XmlNameTable添加一个名称空间前缀),但是这看起来很脆弱,因为XPath在节点testing中是一种非常灵活的语言。 有没有适用于此的标准? 我的做法有点ha but,但似乎工作正常; 我使用search/replace来删除xmlns声明,然后应用XPath。 string readyForXpath = Regex.Replace(xmldocument, "xmlns=\".+\"", String.Empty ); 这是一个公平的方法,或有任何人解决这个不同?
在许多代码示例中,人们通常在创build一个新的char数组之后使用'\0' : string s = "JustAString"; char* array = new char[s.size() + 1]; strncpy(array, s.c_str(), s.size()); array[s.size()] = '\0'; 我们为什么要在这里使用'\0' ?
我有一个抽象类(我知道它不会以这种方式编译,但它是为了理解我想要做的): class AbstractComputation { public: template <class T> virtual void setData(std::string id, T data); template <class T> virtual T getData(std::string id); }; class Computation : public AbstractComputation { public: template <class T> void setData(std::string id, T data); template <class T> T getData(std::string id, T data); }; 所以当我调用setData<double>("foodouble", data)我想把double确定的foodouble (这里不是主要关心的内部机制)设置为double数据。 那么该怎么做? 我认为有可能是通过键入类似virtual void setData<double>(std::string id, double […]
有没有一个函数来循环在C中的float或我需要写我自己的? float conver = 45 59 2346543; 我想将实际值四舍五入到小数点后一位,收敛= 45。
我有这样的东西: if (f = acquire_load() == ) { … use Foo } 和: auto f = new Foo(); release_store(f) 你可以很容易地想象一下,使用带有load(memory_order_acquire)和store(memory_order_release)的primefaces的acquire_load和release_store的实现。 但是现在如果release_store是通过_mm_stream_si64实现的,这是一个非暂时写入,而不是相对于x64上的其他存储进行sorting的呢? 如何获得相同的语义? 我认为以下是最低要求: atomic<Foo*> gFoo; Foo* acquire_load() { return gFoo.load(memory_order_relaxed); } void release_store(Foo* f) { _mm_stream_si64(*(Foo**)&gFoo, f); } 并如此使用它: // thread 1 if (f = acquire_load() == ) { _mm_lfence(); … use Foo } 和: […]
当读取堆栈跟踪如: [FormatException: Input string was not in a correct format.] System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +2755599 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +112 System.Convert.ToInt32(String value) +68 +68,+112等数字意味着什么? 我猜他们是对某事的抵消。 如果是这样,什么?
在另一个话题中 ,@Dietmar给出了这个解决scheme: template <typename… T> std::tuple<T…> parse(std::istream& in) { return std::tuple<T…>{ T(in)… }; } 说明, 使用大括号初始化工作是因为大括号初始化符列表中的参数的评估 顺序是它们出现的顺序 。 (强调我的) C ++标准(n3485)的相关文本是, 在braced-init-list的初始化程序列表中,初始化程序子句(包括从程序包扩展(14.5.3)产生的任何子程序子句)按其出现的顺序进行评估。 也就是说,与给定初始化子句相关联的每个值计算和副作用在与初始值设定项列表的逗号分隔列表中的任何初始化子句相关联的每个值计算和副作用之前被sorting。 [注意:不pipe初始化的语义如何,这个评估顺序都是成立的。 例如,当初始化列表的元素被解释为构造函数调用的参数时,即使通常对调用的参数没有sorting约束,也适用。 – 注意] 所以我试图用下面的代码来testing它: template<int N> struct A { std::string data; A(std::istream & stream) { stream >> data; } friend std::ostream& operator<<(std::ostream & out, A<N> const & a) { return out […]
今天在程序中我遇到了一个有趣的情况,那就是我无意中把一个无符号的整数赋给了std :: string。 VisualStudio C ++编译器没有给出任何警告或错误,但是当我运行这个项目时,我碰巧注意到了这个错误,并且给了我的string垃圾字符。 这是代码的样子: std::string my_string(""); unsigned int my_number = 1234; my_string = my_number; 下面的代码也编译好: std::string my_string(""); unsigned int my_number = 1234; my_string.operator=(my_number); 以下结果是一个错误: unsigned int my_number = 1234; std::string my_string(my_number); 到底是怎么回事? 编译器如何用最后一个代码块停止构build,而是让前两个代码块构build?
首先: 我只是为了好玩而渴望学习这个问题。 我不得不承认我喜欢搞微观优化(虽然他们从来没有在我的任何开发中导致速度的显着提高)。 DateTime.DayOfWeek方法不代表我的任何应用程序的瓶颈。 而且在任何其他方面都不太可能成为问题。 如果有人认为这种方法对应用程序的性能有影响,他应该考虑什么时候进行优化 ,然后进行性能分析。 用ILSpy反编译DateTime类,我们找出DateTime.DayOfWeek是如何实现的: [__DynamicallyInvokable] public DayOfWeek DayOfWeek { [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] get { return (DayOfWeek)((this.InternalTicks / 864000000000L + 1L) % 7L); } } public long Ticks { [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] get { return this.InternalTicks; […]