On Wednesday, 15 November 2017 at 09:34:32 UTC, helxi wrote:
On Wednesday, 15 November 2017 at 09:23:53 UTC, Jonathan M Davis wrote:
On Wednesday, November 15, 2017 09:04:50 helxi via Digitalmars-d-learn wrote:
Hi. What function signature should I use for receiving a constant reference of an r/l value object? Is it auto fn(inout ref const
myClass obj)?
I want to:
1. Take a constant reference of the object, not copy them
2. The object itself may be const or non const.

ref const(Type) would be the const version of ref Type. e.g.

auto foo(ref const(int) i) {...}

- Jonathan M Davis

Thanks. Just a couple of follow-ups:
1. I've never seen a signature like `const(int)`is the enclosing parenthesis around the `int` necessary? 2. What effects does prefixing the arguments with `inout` have? For example: fn(inout ref const string str){...}

Terribly sorry for my bad choice of words. Basically I want to utilize D's "inout" to avoid writing two functions like this:

#include <iostream>
#include <string>

void fn(std::string& str) {
  std::cout << str << " called from fn(std::string& str)"
            << "\n ";
}

void fn(const std::string& str) {
  std::cout << str << " alled from fn(const std::string& str)"
            << "\n";
}

int main() {
  fn("Test 1");
  std::string b = "test";
  b += " 2";
  fn(b);
}

Reply via email to