草庐IT

c++ - int[n][m],其中 n 和 m 在运行时已知

我经常需要创建一个二维数组,其宽度和高度(让它们为n和m)在编译时未知,通常我这样写:vectorarr(n*m);我手动访问元素:arr[j*m+i]我最近被告知我可以改写:intarr[n][m]//nandmstillonlyknownatruntime.所以这里有2个问题:C++标准允许这种行为吗?我应该如何将这样的数组传递给函数?g++报告arr的类型为int(*)[n],但同样,n是动态的,在声明它的函数之外是未知的(main)。 最佳答案 您所询问的功能(尺寸仅在运行时已知)是C++的非标准扩展,而是C.99的标准扩展

c++ - 隐式转换将符号 'int"更改为 'unsigned int"

我正在使用clang++编译程序,我需要在clang++中正确编译它。我在其他编译器上没有错误。代码中的错误行是memset(grid_,0,sizeof(int)*x_quadrants*y_quadrants);整个函数是这样的:Ocean::Ocean(intnum_boats,intx_quadrants,inty_quadrants){grid_=newint[x_quadrants*y_quadrants];memset(grid_,0,sizeof(int)*x_quadrants*y_quadrants);x_quadrants_=x_quadrants;y_quadr

c++ - __has_cpp_attribute 不是 'function-like' 宏?

我正在尝试将[[deprecated]]属性引入我的代码库。然而,并不是所有我需要支持的编译器都支持这种语法(在attributestandardizationproposalN2761中描述了标准化之前不同编译器使用的各种方法)。因此,我尝试在此属性中有条件地编译,首先使用__has_cpp_attribute类宏函数(如果可用),如下所示:#ifdefined(__has_cpp_attribute)&&__has_cpp_attribute(deprecated)#defineDEPRECATED(msg)[[deprecated(msg)]]#elifOTHER_COMPILE

c++ - 将 float 转换为 int,还是将 int 转换为 float?

我可以将常量定义为float或32位uint:constfloatSecondsPerMinute=60.0F;或constuint32SecondsPerMinute=60U;const用在一些期望int的方程和一些期望float的方程中。我想让我的编译器和静态分析工具满意,所以我会根据需要将其static_cast为适当的类型。是将const定义为float并转换为int更好,还是将其定义为int并转换为float?这有什么不同,还是这更多是个人意见?假设常量与int和float的使用次数相同。 最佳答案 模板怎么样:templ

c++ - std::future<neither::Either<int, std::string>> 段错误

本题中的代码使用了Either在这里找到实现:https://github.com/LoopPerfect/neither.明确地说,我怀疑这是这个特定库的问题,否则我会在那里制造问题。以下代码段按预期工作:std::futuref=std::async(std::launch::async,[](){return"test";}std::cout下面会产生一个段错误:std::future>f=std::async(std::launch::async,[](){returnneither::Either(neither::right(std::string("test")));})

c++ - 在 CPP 中用单个引用表示两种或多种数据类型

在我的代码中,对于某些变量,我总是必须编写unsignedlonglong来声明变量。有没有一种方法可以使用单个单词(例如“ULL”)来表示unsignedlonglong,然后使用这种语法来声明其他变量。例如ULL数量; 最佳答案 你必须这样声明:typedefunsignedlonglongULL; 关于c++-在CPP中用单个引用表示两种或多种数据类型,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

c++ - 使用/Wp64 编译时如何在没有警告的情况下将 strlen 的结果转换为 int

intl=strlen(s);警告C4244:“=”:从“__w64int”到“int”的转换,可能会丢失数据我需要用内联函数替换strlenintl=new_strlen(s);但是我如何在没有警告且不使用pragma的情况下将strlen的结果移植到int中?我可以保证我的字符串中不超过20亿个字符!所有像reinterpret_cast、static_cast这样明显的事情也会产生错误或警告。编辑:啊。c风格的转换:(int)确实有效。我一直坚信它没有。 最佳答案 constchar*str="Hello";intlen=st

c++ - 从 int 转换为 int32

我的C++代码中有一堆int,我需要将其更改为int32。与我的bool相同。为了使用int32和bool32,我需要包含什么header。另外,一旦我制作了它们,我该如何声明它们。我可以只用int32替换int吗?例如:intx;成为int32x;当我尝试从int更改为int32时,我遇到了很多错误。这里有一些:错误C4430:缺少类型说明符-假定为int。注意:C++不支持default-int错误C2086:“constintx”:重新定义 最佳答案 如果您的编译器支持它,将为您提供int32_t,C99固定宽度整数类型。从未

c++ - std::map 的 int 类型比较的 operator< 重载? (我希望它按降序排序..)

我遇到了一个问题,我想定义一个map,它在内部按第一个的降序排序。如果第一个不是主要类型,比如它是一个类,我可以在该类中重载“非常感谢!! 最佳答案 添加比较器:#includemap>m;默认为less. 关于c++-std::map的int类型比较的operator https://stackoverflow.com/questions/8659744/

c++ - 压缩 .cpp 文件的缺点?

在MSVC++中编译“静态库”项目时,我经常得到几MB大小的.lib文件。如果我使用条件宏并包含指令以在编译时将所有.cpp文件“压缩”到一个.cpp文件中,则.lib文件大小会显着减小。这种做法有什么缺点吗? 最佳答案 UnityBuilds的主要问题在于它们打破了C++的工作方式。在C++中,经过预处理的源文件称为翻译单元。一些符号是这个翻译单元的“私有(private)”符号:在命名空间级别声明为static的符号在匿名命名空间中声明的任何内容如果您合并几个C++文件,那么编译器将共享那些private符号,这些private