我正在使用这本书学习C++两个月:编程原理和使用C++的练习,现在我想澄清一些关于我的演员的疑问.当我执行隐式转换时,例如:
char c = 'a';
int b = c;
Run Code Online (Sandbox Code Playgroud)
这里c的值隐式转换为int类型,而不使用任何显式运算符.这被认为是铸造?或者当我必须执行如下的显式转换时,它被认为是铸造:
int a = 10;
int b = 5.5;
double sum = double (a) / b;
Run Code Online (Sandbox Code Playgroud)
我知道这听起来可能是一个愚蠢的问题,但我只是想确定转换.
我是编程新手,我开始使用C++编程原理和实践来学习它.今天我在这里是因为我在理解constexpr功能方面遇到了一些问题.在第8章中,作者在某些方面介绍了它们,并使用这些词语作了简短的例子:
函数表示计算,有时我们想在编译时进行计算.希望编译器评估计算的原因通常是避免在运行时进行数百万次相同的计算.
我们通过将函数声明为函数来传达我们打算在编译时评估
constexpr函数.一个constepxr函数可以在仅仅如果它被赋予常量表达式作为参数编译时进行评估.Run Code Online (Sandbox Code Playgroud)constexpr double xscale = 10; // scaling factors constexpr double yscale = 0.8; constexpr Point scale(Point p) { return { xscale*p.x, yscale*p.y }; };假设该点是一个简单的结构,其中成员x和y代表2D坐标.现在,当我们给出
scale()一个Point参数时,它会返回一个坐标根据因子xscale而缩放的点yscale.例如:Run Code Online (Sandbox Code Playgroud)void user(Point p1) { Point p2{10,10}; Point p3 = scale(p1); Point p4 = scale(p2) // p4 == {100,8} constexpr Point p5 = scale(p1); // error : scale(p1) is not a constant expression constexpr Point p6 = …
我已经学习 C++ 两个月了,现在正在学习我的书(使用 C++ 的编程原理和实践)中有关错误的章节。但在研究了第一页之后,我有一个问题:运行时错误和逻辑错误之间有什么区别?根据我的书,运行时错误是在运行时检查发现的错误,我们可以进一步将运行时错误分类为:
而逻辑错误只是程序员在寻找错误结果的原因时发现的错误。
我以为我已经理解了这种差异,但后来作者提供的一个例子让我产生了疑问。这是例子:
#include "std_lib_facilities.h"
int area(int lenght, int width) // calculate area of rectangle
{
return lenght * width;
}
int framed_area(int x, int y) // calculate area within frame
{
return area(x - 2, y - 2);
}
int main()
{
int x = -1;
int y = 2;
int z = 4;
int area1 = area(x, y);
int area2 = framed_area(1, z);
int area3 = framed_area(y, z);
double …Run Code Online (Sandbox Code Playgroud) 我正在学习C++编程语言,在一章中我的书向我介绍了常量的概念:
必须为constexpr符号常量指定在编译时已知的值
在编译时知道什么值?我们为什么需要它们?
我是编程新手,我正在使用这本书学习C++编程语言:使用C++编程原理和实践.我今天在这里,因为在第8章末尾,作者关注功能并提出一个练习,邀请学习者思考问题的更好解决方案:
编写一个函数,查找向量参数的最小和最大元素,并计算均值和中位数.不要使用全局变量.返回
struct包含结果的a或通过引用参数传回它们.您更喜欢哪两个返回多个值?为什么?
现在,通常我不会定义单个函数来执行多个操作,但在这种情况下,我必须只创建一个函数并考虑如何返回多个值.我的第一个方法是创建一个带有这样的引用参数的函数:
void my_func(
vector<double>& numbers,
double& min,
double& max,
double& mean,
double& median
);
Run Code Online (Sandbox Code Playgroud)
但继续编写程序我开始认为这个解决方案使用了太多的参数,也许提出的其他解决方案(使用struct)会更好.你会如何用a struct来解决这个问题?如何从函数中返回多个值?
我正在使用《C++ 编程原理和实践》这本书学习 C++。在第 3 章末尾,作者问什么终止将输入读取到 int 中,我认为当您像字符串类型一样输入空格时,将输入读取到输入中终止,但在编写此程序后,我有一些疑问:
constexpr double cm_per_inch = 2.54;
double lenght = 1;
char unit = 0;
cout << "Please enter a lenght followed by a unit (c or i):\n";
cin >> lenght >> unit;
if (unit == 'i')
cout << lenght << "in == " << cm_per_inch * lenght << "cm\n";
else
cout << lenght << "cm == " << lenght / cm_per_inch << "in\n";
Run Code Online (Sandbox Code Playgroud)
在这里,如果我输入 1i cin 会将 1 读入长度,将 i 读入单位,为什么?我不应该使用空格来终止读取 int 吗?怎么了 ?
我是编程的初学者,并且正在尝试使用C++编写原理和练习来学习C++.在本书的某些部分,您可以尝试进行一些练习,其中一个练习是关于计算数字的平方,这是我的书中所说的:
在不使用乘法运算符的情况下实现square(),即通过重新添加来执行x*x(将变量结果启动为0并将x添加x次).
我已经找到了这个程序的解决方案,但我的第一个试验是这样的:
#include <iostream>
int main()
{
int a = 0;
std::cout << "Enter an integer value : ";
std::cin >> a;
while (a < a * a)
{
a += a;
std::cout << a << "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这段代码是错误的,但我无法理解程序的输出,如果我输入5程序打印10 20 30 40 50直到8000,为什么for循环不会在a大于它的平方时停止?我很想知道为什么要这么做