【发布时间】:2020-05-03 06:54:10
【问题描述】:
我正在学习 Bjarne Stroustrup 的书“使用 C++ 进行编程原理和实践”。我从here下载了他的头文件,并在Windows的VSCode中使用了如下编译命令:
g++ -Wall -Wextra -Wconversion -pedantic -std=c++17 -g -c main.c
编译器抛出一堆错误:
std_lib_facilities.h: In member function 'char& String::operator[](unsigned int)':
std_lib_facilities.h:114:8: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits]
if (i<0||size()<=i) throw Range_error(i);
~^~
std_lib_facilities.h: In member function 'const char& String::operator[](unsigned int) const':
std_lib_facilities.h:120:8: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits]
if (i<0||size()<=i) throw Range_error(i);
~^~
std_lib_facilities.h: At global scope:
std_lib_facilities.h:222:2: warning: extra ';' [-Wpedantic]
};
我的问题是:
- 删除第 222 行的分号是否正确? 有问题的代码:
default_random_engine& get_rand()
{
static default_random_engine ran;
return ran;
};
-
unsigned expression < 0 is always false的可能修复方法是什么? - 今后使用 g++ (mingw64) 应该注意什么?如果可能,有哪些资源可以学习如何有效使用 g++ 编译器?
要编译的代码只是一个简单的 hello world。 谢谢
【问题讨论】:
-
第二季度。 unsigned int 始终为正数或零,因此“i
-
我想了很多,但我仍然不确定。这是否意味着只要 i 的输入为负数,编译器就会自动抛出错误标志?
-
不,它不能是负面的。如果您编写类似“unsigned int i=-1”的代码,则 i 的值将是 unsigned int 的最大值。
-
@karln-create 编译器很可能会完全删除代码,因为它不可能发生。
-
i < 0是 Stroustrup 代码中的一个明显错误,而不是编译器问题。显而易见的解决方法是不检查无符号类型是否为负数……您可能想检查该书的版本是否有一些已发布的勘误表。
标签: c++ header compile-time gcc-pedantic