简单来说就是
&someObject->someAttribute.someMember;
Run Code Online (Sandbox Code Playgroud)
相当于
&(someObject->someAttribute.someMember);
Run Code Online (Sandbox Code Playgroud)
要么
(&someObject)->someAttribute.someMember;
Run Code Online (Sandbox Code Playgroud)
要么
(&(someObject->someAttribute)).someMember;
Run Code Online (Sandbox Code Playgroud)
或者你真的应该在那里放置明确的括号以确保安全吗?
可能重复:
插入符号在C++/CLI中的含义是什么?
System::String是一个班级.额外的插入符是什么意思?
System::String^ productString = L"";
Run Code Online (Sandbox Code Playgroud)
谁看过这个吗?我在Stroustrop找不到任何东西.
我指的是此处描述的元组文字: https: //blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/#comment-321926
\n\n喜欢元组字面意思。
\n\n然而,我预见到很多人都会在返回元组中查找项目的顺序,并且想知道我们如何解决这个问题。
\n\n例如,将元组中的项目名称作为身份定义方面而不是顺序更有意义吗?或者有没有办法做到这一点我没有看到?
\n\n例如:假设 NextEmployee() 是一些库方法,我没有\xe2\x80\x99t 的源代码,并且\xe2\x80\x99t 没有特别详细的文档记录,假设它返回(firstname: \xe2\x80\x9cjamie\xe2\x80\x9d, lastname: \xe2\x80\x9chince\xe2\x80\x9d, id: 102348)给我,我说:
(string lastname, var _, int __) = NextEmployee(); // I only need the last name\nRun Code Online (Sandbox Code Playgroud)\n\n编译器要么很乐意将名字分配给姓氏,要么对此发出警告或错误。为什么不直接将姓氏映射到姓氏呢?
\n\n我\xe2\x80\x99d 看到允许更松散耦合的架构,如果我们\xe2\x80\x99t 不必记住元组中姓氏的索引,并且可以只要求一个方面\xe2\x80\x9clastname\ xe2\x80\x9d 之类的。
\n我最近遇到过这种咆哮.
我不太明白文章中提到的一些要点:
deletevs 的小烦恼delete[],但似乎认为它实际上是必要的(对于编译器),而没有提供解决方案.我错过了什么?在"专业分配器"一节中,在功能中f(),似乎可以通过以下方式替换分配来解决问题:(省略对齐)
// if you're going to the trouble to implement an entire Arena for memory,
// making an arena_ptr won't be much work. basically the same as an auto_ptr,
// except that it knows which arena to deallocate from when destructed.
arena_ptr<char> string(a); string.allocate(80);
// or: arena_ptr<char> string; string.allocate(a, 80);
arena_ptr<int> intp(a); intp.allocate();
// or: arena_ptr<int> intp; intp.allocate(a);
arena_ptr<foo> fp(a); fp.allocate();
// or: arena_ptr<foo>; fp.allocate(a);
// use templates …Run Code Online (Sandbox Code Playgroud)编辑:这个问题可能会使用更合适的标题.随意在评论中提出建议.
在使用带有大类集的C++时,我曾遇到const一种麻烦的情况,不是因为它的功能,而是因为它有一个非常简单的定义.它对整数或字符串的适用性是显而易见的,但对于更复杂的类,通常有多个属性可以彼此独立地修改.我想很多人都被迫了解mutable关键字可能会有类似的挫折感.
对我来说最明显的例子是矩阵类,表示3D变换.矩阵将表示平移和旋转,其中每个都可以在不修改另一个的情况下进行更改.想象一下以下类和函数假设添加'多属性const'.
class Matrix {
void translate(const Vector & translation) const("rotation");
void rotate(const Quaternion & rotation) const("translation");
}
public void spin180(const("translation") & Matrix matrix);
public void moveToOrigin(const("rotation") & Matrix matrix);
Run Code Online (Sandbox Code Playgroud)
或者想象一下预定义的const关键字,比如"_comparable",它允许您定义随意修改对象的函数,只要您保证不会更改任何会影响对象排序顺序的内容,从而简化了对已排序容器中对象的使用.
这种功能的优点和缺点是什么?你能想象在你的代码中实际使用它吗?使用当前的const关键字功能是否有一种很好的方法来实现这种功能?
记住
const我希望这是一个严格的编译时功能.const自切片泥以来是最愚蠢的事情,我会把它看成是你对此有同感.无需发帖,谢谢.编辑:回应SBK关于会员加价的评论,我建议你没有.对于标记为const的类/成员,它的工作方式与以往一样.对于标记为const("foo")的任何内容,它将所有成员视为可变,除非另有标记,将其留给类作者以确保其功能与广告一样有效.此外,在内部表示为2D数组的矩阵中,您不能将单个字段标记为const或非const用于平移或旋转,因为所有自由度都在单个变量声明中.
使用while loop v/s foreach/for循环或反之亦然的性能问题是什么?
在php中使用foreach循环v/s总是更好吗?
这有效:
#include<cstdio>
class A{
public:
A(int a):var(a){}
int var;
};
int f(A obj) {
return obj.var;
}
int main() {
std::cout<<f(23); // output: 23
return 0;
}
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
#include<cstdio>
class A{
public:
A(int a, int b):var1(a), var2(b){}
int var1, var2;
};
int f(A obj) {
return (obj.var1 + obj.var2);
}
int main() {
cout<<f(22, 23); // error: conversion from 'int' to
// non-scalar type 'A' requested
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第二段代码不起作用,但我找不到足够好的理由.对我来说,代码看起来太奇怪了.
但是在这种情况下只允许一次隐式转换的实际原因是什么?它是一个像这样唯一的语言功能吗?
我遇到了一些用C编写的代码,看起来像这样:
if (file == NULL)
TRUE; /* <-- What does that mean? */
Run Code Online (Sandbox Code Playgroud)
我认为这是另一种说法:
if (file == NULL);
Run Code Online (Sandbox Code Playgroud)
但我错过了什么,有没有理由这样做的第一种方式而不是第二种方式?
更新:
做一些挖掘,TRUE定义如下:
#define TRUE !0
Run Code Online (Sandbox Code Playgroud) 最近我的大学为本科生设置了大型项目.其中一个项目是创建一种新的编程语言,其中包含其他语言的所有最理想的部分.现在,我知道很多事情对我来说是非常不可行的(或者甚至是密切的) - 例如,使语言非常接近自然语言.
有一些很好的功能,如高阶函数和交换两个变量值的运算符.然而,我很难想到很多,所以一些建议将非常感激 - 最好的建议被标记为答案.我只是在这里寻找想法,而不是如何实现它们的方法.
compiler-construction language-features programming-languages language-design compilation
我想知道python的Dictionary的源代码在哪里.我知道源代码可能很难阅读,所以我真的只是在粗略描述了实现和使用的哈希例程之后.
如果使用链接或重建表,是否有人知道使用什么类型的算法以及它们如何处理冲突.
我知道这个问题有点模糊,所以只是在正确方向上的一点是有帮助的.如果有人知道python字典上的任何好文档会很棒.
c++ ×4
c ×2
.net ×1
allocation ×1
c#-7.0 ×1
c++-cli ×1
compilation ×1
const ×1
constructor ×1
dictionary ×1
hashtable ×1
new-operator ×1
performance ×1
php ×1
python ×1
tuples ×1
valuetuple ×1
visual-c++ ×1