标签: language-features

如果参数复杂,*和&运算​​符的操作是什么?

简单来说就是

&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 c++ language-features operator-keyword

2
推荐指数
1
解决办法
194
查看次数

'System :: String ^'在C++中的含义是什么?

可能重复:
插入符号在C++/CLI中的含义是什么?

System::String是一个班级.额外的插入符是什么意思?

System::String^ productString = L"";
Run Code Online (Sandbox Code Playgroud)

谁看过这个吗?我在Stroustrop找不到任何东西.

.net language-features c++-cli visual-c++

2
推荐指数
3
解决办法
4999
查看次数

C# 7.0 中的元组文字可以启用面向方面的编程吗

我指的是此处描述的元组文字: 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)给我,我说:

\n\n
(string lastname, var _, int __) = NextEmployee(); // I only need the last name\n
Run Code Online (Sandbox Code Playgroud)\n\n

编译器要么很乐意将名字分配给姓氏,要么对此发出警告或错误。为什么不直接将姓氏映射到姓氏呢?

\n\n

我\xe2\x80\x99d 看到允许更松散耦合的架构,如果我们\xe2\x80\x99t 不必记住元组中姓氏的索引,并且可以只要求一个方面\xe2\x80\x9clastname\ xe2\x80\x9d 之类的。

\n

language-features tuples c#-7.0 valuetuple

2
推荐指数
1
解决办法
1613
查看次数

C++'new'运算符的问题?

我最近遇到过这种咆哮.

我不太明白文章中提到的一些要点:

  • 作者提到了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++ language-features allocation new-operator

1
推荐指数
1
解决办法
2536
查看次数

应该扩展const功能吗?

编辑:这个问题可能会使用更合适的标题.随意在评论中提出建议.

在使用带有大类集的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关键字功能是否有一种很好的方法来实现这种功能?

记住

  • 我知道这样的语言功能很容易被滥用.许多C++语言特性也是如此
  • 就像const我希望这是一个严格的编译时功能.
  • 如果你已经认为const自切片泥以来是最愚蠢的事情,我会把它看成是你对此有同感.无需发帖,谢谢.

编辑:回应SBK关于会员加价的评论,我建议你没有.对于标记为const的类/成员,它的工作方式与以往一样.对于标记为const("foo")的任何内容,它将所有成员视为可变,除非另有标记,将其留给类作者以确保其功能与广告一样有效.此外,在内部表示为2D数组的矩阵中,您不能将单个字段标记为const或非const用于平移或旋转,因为所有自由度都在单个变量声明中.

c++ language-features const

1
推荐指数
2
解决办法
279
查看次数

是否存在使用while loop vs foreach/for循环的性能问题?

使用while loop v/s foreach/for循环或反之亦然的性能问题是什么?

在php中使用foreach循环v/s总是更好吗?

php performance language-features programming-languages

1
推荐指数
1
解决办法
1584
查看次数

为什么只允许一个隐式转换将参数解析为C++中的函数?

这有效:

#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++ language-features constructor language-design

1
推荐指数
1
解决办法
127
查看次数

C'TRUE;' 声明

我遇到了一些用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)

c language-features

1
推荐指数
1
解决办法
540
查看次数

编程语言需要哪些功能?

最近我的大学为本科生设置了大型项目.其中一个项目是创建一种新的编程语言,其中包含其他语言的所有最理想的部分.现在,我知道很多事情对我来说是非常不可行的(或者甚至是密切的) - 例如,使语言非常接近自然语言.

有一些很好的功能,如高阶函数和交换两个变量值的运算符.然而,我很难想到很多,所以一些建议将非常感激 - 最好的建议被标记为答案.我只是在这里寻找想法,而不是如何实现它们的方法.

compiler-construction language-features programming-languages language-design compilation

1
推荐指数
1
解决办法
1469
查看次数

Python字典细节

我想知道python的Dictionary的源代码在哪里.我知道源代码可能很难阅读,所以我真的只是在粗略描述了实现和使用的哈希例程之后.

如果使用链接或重建表,是否有人知道使用什么类型的算法以及它们如何处理冲突.

我知道这个问题有点模糊,所以只是在正确方向上的一点是有帮助的.如果有人知道python字典上的任何好文档会很棒.

python language-features dictionary hashtable

1
推荐指数
1
解决办法
171
查看次数