草庐IT

c++ - 标准中的哪个地方说成员别名声明可以像静态成员一样使用?

考虑以下片段:#includestructA{inti;usingInt=int;};intmain(){std::cout在clang中编译执行正常和海湾合作委员会。我知道这看起来很明显,但我在标准(C++14)中找不到任何支持在main()中引用A::Int的内容。 最佳答案 这只是您的正常限定查找。来自[basic.lookup.qual]:Thenameofaclassornamespacememberorenumeratorcanbereferredtoafterthe::scoperesolutionoperator(5

c++ - 为什么 std::shuffle 和 std::sort 一样慢(甚至慢)?

考虑测量执行时间和执行交换次数的简单代码:#include#include#include#include#includestructA{A(inti=0):i(i){}inti;staticintnSwaps;friendvoidswap(A&l,A&r){++nSwaps;std::swap(l.i,r.i);}booloperatorv(10000000);std::minstd_randgen(std::random_device{}());std::generate(v.begin(),v.end(),[&gen](){returngen();});autos=high_re

c++ - 如何构建一个元组 vector 并像对一样对它们进行排序?

假设,我有几个像这样的整数元素:(391),(152),(283),(144),(165),(156)现在我想对元素进行排序,例如对vector进行排序。唯一不同的是,这里我们有3个键,而不是2个键。排序后的元素将如下所示:(144),(152),(156),(165),(283),(391)是否有任何STL或其他技术可以实现此目的?我发现了元组,但在理解它时遇到了一些问题。你们能以任何方式帮助我吗?可能是通过提供有用的链接或解释过程。 最佳答案 Avector的tuple如果需要,可以只使用STL进行排序。#include#inc

c++ - 我可以像 C# 的 Action 一样使用 C++ 函数指针吗?

在C++中,我第一次遇到函数指针。我试图用它来使它类似于C#中的Action和Delegate。但是,在声明函数指针时,需要指定函数所在类的类型。例如)void(A::*F)();我可以使用可以存储任何类的成员函数的函数指针吗?一般情况下,函数指针的使用如下面的代码所示。classA{public:voidAF(){cout我想像下面的代码一样使用它。这可能吗?还是有别的东西可以代替函数指针?classA{public:voidAF(){cout我通过答案解决了问题。谢谢!#include#includeclassA{public:voidAF(){std::coutBF;};intm

c++ - 为什么auto y = reference_to_x的地址和x的地址不一样?

假设您有以下代码:long&fn2(long&another_var1,longanother_var2){another_var1=another_var1+another_var2;another_var2=another_var2+another_var1;returnanother_var1;}intmain(){cout在您到达第2行之前,一切都按预期进行,其中返回false。当你autoresult时,它应该是一个引用变量到another_var1,它是对var1的引用,即它们都应该有相同的地址——它们只是同一内存的别名。查看第1行,返回15,给人一种它们都一样的错觉。然后

c++ - 制作一个 const unique_ptr 然后尝试从它 std::move 给出相同的错误,就好像您试图访问复制构造函数一样

当我们尝试复制unique_ptr(例如,将一个唯一指针分配给另一个)时,我注意到错误是ErrorC2280std::unique_ptr#includeintmain(){std::unique_ptra=std::make_unique(2);std::unique_ptrb=a;}没关系,因为unique_ptr没有定义复制构造函数。您不会从唯一指针进行复制以在它们之间move(转移指针的所有权)。有趣的是(好吧,也许不是),这段代码抛出了同样的错误。现在我知道它是无效的(我将第一个unique_ptr声明为不可变对象(immutable对象)),但错误消息暗示它正在尝试调用复制

c++ - 如何像编译器一样获取每一个虚函数索引?

是否有一些插件或工具可以读取.h文件(或简单地修改Intellisense本身)并吐出每个函数及其虚函数表索引?有一个模式我还没有弄清楚与多态性有关,当你开始有5个或更多类相互派生时,它会变得困难5倍。但是无论如何,MSVC++编译器在编译从C++到Assembly的虚函数调用时总是吐出正确的虚函数表索引。必须有更好的方法来获取该索引,而无需加载、断点、读取偏移量和重写代码,对吧?谢谢! 最佳答案 使用隐藏的MicrosoftC/C++编译器选项“/d1reportAllClassLayout”。这将打印出所有类的内存布局和vtab

c++ - 像普通方法一样调用构造函数和析构函数的注意事项和风险?

在我的程序中有一点需要将某个对象的状态重置为“出厂默认设置”。该任务归结为执行析构函数和构造函数中编写的所有内容。我可以删除并重新创建该对象——但我可以将析构函数和构造函数作为普通对象调用吗?(特别是,我不想将更新后的指针重新分配给新实例,因为它在程序其他地方的拷贝中徘徊)。MyClass{public:MyClass();~MyClass();...}voidreinit(MyClass*instance){instance->~MyClass();instance->MyClass();}我可以这样做吗?如果是这样,是否有任何风险、注意事项或我需要记住的事情?

c++ - 如何像 C++ const/constexpr 一样定义 CUDA 设备常量?

在.cu文件中,我在全局范围内尝试了以下操作(即不在函数中):__device__staticconstdoublecdInf=HUGE_VAL/4;并得到nvcc错误:error:dynamicinitializationisnotsupportedfor__device__,__constant__and__shared__variables.如果可能的话,如何在设备上定义C++const/constexpr?注意1:#define是不可能的,不仅出于美学原因,而且因为在实践中表达式更复杂并且涉及内部数据类型,而不仅仅是double。因此,每次在每个CUDA线程中调用构造函数的代价

java - CAS 是一个像自旋一样的循环吗?

我在阅读sun.misc.Unsafe.Java的代码时遇到了一个问题。CAS是一个像自旋一样的循环吗?起初,我认为CAS只是一种低活方式的原子操作。但是,当我试图找到函数compareAndSwapInt的源代码时,我找到了这样的cpp代码:jbyteAtomic::cmpxchg(jbyteexchange_value,volatilejbyte*dest,jbytecompare_value){assert(sizeof(jbyte)==1,"assumption.");uintptr_tdest_addr=(uintptr_t)dest;uintptr_toffset=dest