草庐IT

标点符号

全部标签

c++ - 惰性符号绑定(bind)失败 : symbol not found

我有三个头文件inmyproject描述对象Rational,Complex,和RubyObject.前两个是模板。所有这些都可以使用在头文件中定义的复制构造函数相互转换——除了那些从constRubyObject&构造Rational和Complex的构造函数,定义inasourcefile.注意:这些定义是必要的。如果它们全部进入标题,您将得到circulardependency.不久前,我遇到了someunresolvedsymbolerrors使用源文件中定义的两个复制构造函数。我能够在源文件中包含以下函数voidnm_init_data(){nm::RubyObjectobj

c++ - 如果将某个符号的名称用作 STL 容器的元素,为什么我不能隐藏它?

根据answer,我通过使用标志-fvisibility=hidden和构建工具链中的命令strip隐藏了共享库的大部分内部符号。但我发现一些用作标准C++容器元素的符号无法隐藏。例如,/*example1.cpp*/#include#defineMY_EXPORTS__attribute__((visibility("default")))extern"C"{MY_EXPORTSvoid*create();MY_EXPORTSvoiddosth(void*,inti);MY_EXPORTSvoidrelease(void*);}classPoint{public:intx;inty;

c++ - 为什么编译器不使无符号与有符号比较安全?

这个问题在这里已经有了答案:Woulditbreakthelanguageorexistingcodeifwe'daddsafesigned/unsignedcomparestoC/C++?(6个答案)关闭7年前。我们知道,像这样的代码会产生一个警告:for(inti=0;i解决方案类似于autoi=0u;,decltype(v.size())或std::vector::size_type但假装我们被迫同时拥有有符号和无符号的值。编译器会自动转换int成为unsignedint(实际类型无关紧要)。使用显式转换,static_cast(i)使警告消失,但这很糟糕,因为它只做了与编译器相

c++ - 将有符号整数转换为二进制 float 是否比逆运算便宜?

我从诸如“Whyyoushouldnevercastfloatstoints”之类的文章和许多其他喜欢它的文章中了解到,将浮点数转换为带符号的整数是很昂贵的。我也知道某些架构上的某些转换指令或SIMDvector指令可以加快该过程。我很好奇将整数转换为浮点数是否也很昂贵,因为我在该主题上找到的所有Material都只讨论了从浮点数转换为整数的成本。在有人说“你为什么不测试它之前?”我不是在谈论特定架构上的性能,我对遵循IEEE754-2008的跨多个平台转换的算法行为感兴趣。标准。转换算法是否有一些固有的东西会影响一般的性能?直觉上,我认为从整数到浮点的转换通常会更容易,原因如下:仅当

c++ - Visual C++ 编译器为不明确的符号提供了错误的行引用

代码如下:namespacen1{templatevoidn2();templatevoidn2(T);}namespacen2/*line12*/{classc{};}usingnamespacen1;namespacen3{voidfoo(n2::c);}voidn3::foo(n2::c)/*line24*/{}尝试使用最新版本的VisualC++编译它时出现以下错误:1>test.cpp(24):errorC2872:'n2':ambiguoussymbol1>test.cpp(12):note:couldbe'n2'1>test.cpp(24):note:or'n2'第12行

C++符号分析: how to determine which static initialization is performed?

我想分析是什么原因导致我在Linux上由GCC(v.6.1.1)编译的共享C++库的大小。readelf-sWlibfoo.so告诉我特别大的函数叫做__static_initialization_and_destruction_0,例如:000000000026c42010272FUNCLOCALDEFAULT12__static_initialization_and_destruction_0(int,int)[clone.constprop.1774]我将-Wl,-Map,foo.map添加到CXX标志以生成链接器映射文件。在该映射文件中查找0x000000000026c420会

c++ - 大小应该使用有符号整数还是无符号整数?

标准库vector::size()给出size_t,一个无符号数。在一次CppCon演讲中,我听到有人(是ChandlerCarruth吗?)说这很不幸,应该使用有符号整数。背景是没有为有符号整数定义溢出,因此编译器有更多的回旋余地。Carruth在一次谈话中展示了如何uint8_t作为forbzip2中的循环索引在x86上创建的机器指令比int8_t多得多因为它必须使用掩码和移位显式模拟溢出。在我现在处理的代码中,有一些严格为正的大小。这些表示为size_t.这看起来不错,因为这表明它们不能为负。另一方面,不需要定义模运算,因此只要有符号整数足够大(我们达到200),无符号整数就会为

c++ - `rep` 时钟中的有符号和无符号 `std::chrono`

std::chrono::system_clock的rep类型必须是有符号算术类型,而steady_clock和high_resolution_clock(和自定义时钟类型)不需要具有签名的rep类型。这种区别的基本原理是什么?使用无符号rep类型的时钟会产生什么后果? 最佳答案 这样做的理由是让供应商在steady_clock上有更多的自由。和high_resolution_clock.事后看来,这种自由并不是必需的,因为迄今为止所有的实现都使用带符号的整数类型。使用未签名的rep的后果在这些时钟中是他们的duration嵌套类型

c++ - 将移位运算符应用于已定义的有符号类型 : UB and Impl.

C++03标准告诉我们,将移位运算符应用于有符号类型的结果可以是UB和Impl。为负值定义。我的问题如下:为什么运算符它有未定义的行为,而对于运算符>>它只是实现定义?的结果是否有严格的原因?也不能定义实现?提前致谢。 最佳答案 根据5.8/2(不可否认,在C++98中,这是我可以访问的所有内容):ThevalueofE1在我看来,它非常适合左移。未定义的是使用的有符号值(例如二进制补码)的表示,因此结果的数字值是为负值定义的实现。这与右移形成对比,在右移中空位可能为零或填充1,具体取决于有符号值的表示。

java - 从 Assets 加载 Android 中的着色器 - 最后有额外的符号?

我尝试将AndroidOpengles2.0示例修改为NDK示例,除加载着色器外,所有操作均已完成。http://developer.android.com/resources/tutorials/opengl/opengl-es20.html-原创http://pastebin.com/tjtQdLhi-我从安卓资源加载着色器的方法。如果我将着色器硬编码为char*,三角形始终显示并且一切都很好,但随后我尝试从文件加载它,有时会在我的着色器末尾添加一些垃圾符号,因此它们无法编译。符号只是和着色器文件是随机的(可以在顶点或片段或两者中)。我检查了所有东西,只有从着色器文件获取源数据的部