【发布时间】:2018-03-07 18:17:09
【问题描述】:
如何使用函数更改类对象,例如“per.name”?原型设计有必要吗?函数调用?这是按值传递还是引用传递?
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
char* name;
int age;
double weight;
double height;
};
int main()
{
Person per;
per.name = "John"; //change per.name
cout << per.name << endl;
}
我想改名约翰。这是复制的吗?
【问题讨论】:
-
1.
per.name = "John";使用 C++ 中不再支持的旧转换。您不能将字符串文字分配给非常量char*。 2.给name分配一个新地址不会复制它现在指向的字符串的内容。 -
@FrançoisAndrieux 在这种情况下,您所说的“旧转换”是什么意思?这与
const char*到char*有关吗? -
@tadman
char *s = "Hallo";曾经是被允许的,尽管"Hallo"是const并且*s = 'W';是 UB。在某些时候,C++ 摆脱了这一点并需要正确的类型const char *s = "Hallo";,这使得*s = 'W';无法编译。 -
@tadman 过去将
const char[]的地址分配给char*是合法的。这在 c++03 中已弃用并在 c++11 中删除。 -
@nwp 是的,这是有道理的。出于某种原因,我正在考虑其他类型的转换,可能是因为我在 Rust 和 Swift 上花费了太多时间。